首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >筛选数组(JS)

问筛选数组(JS)
EN

Stack Overflow用户
提问于 2018-05-05 06:04:34
回答 5查看 538关注 0票数 1

我在过滤这个包含对象的数组时遇到了问题。如果能给出一个解释,我们将不胜感激。

使用说明:

//使用filter(),只返回你的朋友数组下面的人。//将其赋给一个名为'trueFriends‘的变量。

我的解决方案是:

代码语言:javascript
复制
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 }
];
EN

回答 5

Stack Overflow用户

发布于 2018-05-05 06:08:19

您不应该在filter中使用for循环。筛选器迭代数组并根据条件返回所有元素

​

代码语言:javascript
复制
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)

​

票数 2
EN

Stack Overflow用户

发布于 2018-05-05 06:07:03

在filter函数中使用for循环与此目的背道而驰-尝试使用filter函数进行迭代。在声明数组之前,您也不应该尝试在数组上执行filter。

filter函数的第一个参数是被迭代的项,您只对friend属性感兴趣,因此只能提取friend属性。如果friend为true,那么您希望将true返回给filter函数,以便将其包含在最终的数组中-否则,返回false。因此,只要按原样返回friend属性即可。

​

代码语言:javascript
复制
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);

​

票数 1
EN

Stack Overflow用户

发布于 2018-05-05 06:07:49

您可以使用filter()和reduce()来做同样的事情。

这里使用的是reduce()方法。对于数组的每个元素,reduce和filter都会为函数运行一次。

​

代码语言:javascript
复制
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);

​

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50183618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档