有没有更好的方法来执行此代码?也许使用过滤器或减少



我的代码是正确的,我只是想知道是否有更短的方法可以做到这一点?

我认为过滤器是最好的方法,但我不太确定如何使用它

function tallEnoughToRide(group) {
var result = [];
for (var i = 0; i < group.length; i++) {
if (group[i].heightInInches >= 48) {
result.push(group[i].name);
}
}
return result; //should return a list of people taller than 48 inches
}
var groupA = [{
name: "Mia",
age: 10,
heightInInches: 52
},
{
name: "Jaya",
age: 9,
heightInInches: 45
},
{
name: "Kiana",
age: 10,
heightInInches: 55
},
{
name: "Alex",
age: 11,
heightInInches: 48
}
];
console.log(tallEnoughToRide(groupA));

需要两样东西

  1. .filter((

var groupA = [{
name: "Mia",
age: 10,
heightInInches: 52
},
{
name: "Jaya",
age: 9,
heightInInches: 45
},
{
name: "Kiana",
age: 10,
heightInInches: 55
},
{
name: "Alex",
age: 11,
heightInInches: 48
}
];
console.log(groupA.filter(ele => ele.heightInInches >= 48))

您可以在上面的代码段中看到,filter方法正在根据条件筛选出对象。

  1. .map((

var groupA = [{
name: "Mia",
age: 10,
heightInInches: 52
},
{
name: "Jaya",
age: 9,
heightInInches: 45
},
{
name: "Kiana",
age: 10,
heightInInches: 55
},
{
name: "Alex",
age: 11,
heightInInches: 48
}
];
console.log(groupA.map(obj => obj.name));

您可以在上面的代码片段中看到,map方法正在根据提供的键映射对象。

现在可以将.filter().map()组合在一起。

function tallEnoughToRide(group) {
return group.filter(ele => ele.heightInInches >= 48).map(obj => obj.name)
}
var groupA = [{
name: "Mia",
age: 10,
heightInInches: 52
},
{
name: "Jaya",
age: 9,
heightInInches: 45
},
{
name: "Kiana",
age: 10,
heightInInches: 55
},
{
name: "Alex",
age: 11,
heightInInches: 48
}
];
console.log(tallEnoughToRide(groupA));

您可以使用filter((和map((的组合:

console.log(groupA.filter(obj => obj.heightInInches >= 48).map(obj => obj.name));

简短的答案是,确实存在。从计算角度来看,它们非常相似。但是可读性要好得多。在一行中,它非常清楚应该做什么。

let tallEnoughToRide = groupA.filter(e => e.heightInInches >= 48)

提取名称只看起来像:

let tallEnoughToRide = groupA.reduce((acc, curr) => {
if(curr.heightInInches >= 48)
acc.push(curr.name)
return acc;
}, []);

reduce函数的可读性实际上不是很好。同样,性能非常相似,因为它仍然O(n(

使用什么由你决定。你喜欢什么。解释性代码长或代码短。

我经常在这个线程中看到这条线或类似的内容:

let result = groupA.filter(p => p.heightInInches >= 48).map(p => p.name)

如果您关心性能,请不要实际使用它,如果您还不关心性能,则应该使用它。因为您正在将计算性能让给O(2n(。由于您创建了一个额外的数组,因此您也在使用更多的内存。

最新更新