我的代码是正确的,我只是想知道是否有更短的方法可以做到这一点?
我认为过滤器是最好的方法,但我不太确定如何使用它
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));
需要两样东西
- .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
方法正在根据条件筛选出对象。
- .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(。由于您创建了一个额外的数组,因此您也在使用更多的内存。