我在过滤这个包含对象的数组时遇到了问题。如果能给出一个解释,我们将不胜感激。
使用说明:
//使用filter(),只返回你的朋友数组下面的人。//将其赋给一个名为'trueFriends‘的变量。
我的解决方案是:
var trueFriends = [];
peopleIknow.filter(function(){
for(var i = 0; i < peopleIknow.length; i++){
if (peopleIknow[i].friend == true){
trueFriends.push(peopleIknow[i]);
}
}
});
var peopleIknow = [
{ name: "Steve", friend: true },
{ name: "Dan", friend: false },
{ name: "Bart", friend: true },
{ name: "Sarah", friend: false },
{ name: "Michelle", friend: false },
{ name: "Holly", friend: true }
];发布于 2018-05-05 06:08:19
您不应该在filter中使用for循环。筛选器迭代数组并根据条件返回所有元素
var peopleIknow = [
{ name: "Steve", friend: true },
{ name: "Dan", friend: false },
{ name: "Bart", friend: true },
{ name: "Sarah", friend: false },
{ name: "Michelle", friend: false },
{ name: "Holly", friend: true }
];
var o = peopleIknow.filter(e=> e.friend );
console.log(o)
发布于 2018-05-05 06:07:03
在filter函数中使用for循环与此目的背道而驰-尝试使用filter函数进行迭代。在声明数组之前,您也不应该尝试在数组上执行filter。
filter函数的第一个参数是被迭代的项,您只对friend属性感兴趣,因此只能提取friend属性。如果friend为true,那么您希望将true返回给filter函数,以便将其包含在最终的数组中-否则,返回false。因此,只要按原样返回friend属性即可。
const peopleIknow = [
{ name: "Steve", friend: true },
{ name: "Dan", friend: false },
{ name: "Bart", friend: true },
{ name: "Sarah", friend: false },
{ name: "Michelle", friend: false },
{ name: "Holly", friend: true }
];
const trueFriends = peopleIknow.filter(({ friend }) => friend);
console.log(trueFriends);
发布于 2018-05-05 06:07:49
您可以使用filter()和reduce()来做同样的事情。
这里使用的是reduce()方法。对于数组的每个元素,reduce和filter都会为函数运行一次。
var trueFriends = [];
var peopleIknow = [
{ name: "Steve", friend: true },
{ name: "Dan", friend: false },
{ name: "Bart", friend: true },
{ name: "Sarah", friend: false },
{ name: "Michelle", friend: false },
{ name: "Holly", friend: true }
];
trueFriends = peopleIknow.reduce((acc,i) => {
i.friend && acc.push(i);// same as if(i.friend) then push
return acc;
},[]);
console.log(trueFriends);
https://stackoverflow.com/questions/50183618
复制相似问题