繁体   English   中英

过滤数组(JS)

[英]Filtering An Array (JS)

我在过滤包含对象的数组时遇到了麻烦。 一个解释将不胜感激。

说明:

//使用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 }
];

您不应该在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) 

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); 

您可以使用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); 

不要在过滤器函数中运行for循环。 过滤器非常易于使用。 如果传递给filter的函数的结果为true,则会将该元素添加到返回值中。 这就是您要寻找的!

 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 trueFriends = []; // only the friends where person.friend is truthy trueFriends = peopleIknow.filter(person => person.friend); console.log(trueFriends); 

您创建了过滤器并应用了过滤器在其中所做的工作,此代码将按您的意愿工作。

 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.filter(function(item){ return item.friend}); console.log(trueFriends) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM