JS数组过滤问题求助:如何用filter()筛选对象数组中的好友
用JavaScript的filter()筛选对象数组的正确姿势
嘿,我看到你在使用filter()处理人员数组时有点走偏了,咱们把问题拆解开,一步步搞明白正确的用法哈!
先说说你代码里的几个问题
- 变量顺序错误:你在调用
peopleIknow.filter()之后才定义peopleIknow数组,这会直接抛出ReferenceError——因为执行filter的时候,这个变量还没被创建呢。 - 误用filter()的逻辑:
filter()本身就是用来遍历数组并自动筛选元素的,你完全不需要在它的回调函数里再写一层for循环。这就像你坐电梯上楼,却在电梯里自己爬楼梯一样多此一举😂。 - 没必要手动push元素:你初始化了空数组
trueFriends然后手动往里push,但其实filter()会直接返回筛选后的新数组,直接把这个返回值赋值给变量就行。
正确的实现代码
首先咱们把数组定义放在前面,然后用filter()完成筛选:
// 先定义人员数组 var peopleIknow = [ { name: "Steve", friend: true }, { name: "Sarah", friend: false }, { name: "Mike", friend: true }, { name: "Lisa", friend: false } ]; // 使用filter()筛选好友,直接把返回值赋值给trueFriends var trueFriends = peopleIknow.filter(function(person) { // 对每个遍历到的person对象,判断friend属性是否为true return person.friend === true; });
如果你的运行环境支持ES6箭头函数,还能写得更简洁:
const trueFriends = peopleIknow.filter(person => person.friend);
为什么这样能行?
filter()的工作逻辑其实很简单:
- 它会自动遍历数组里的每一个元素,把当前元素传给回调函数的参数(比如上面的
person)。 - 回调函数需要返回一个布尔值:如果返回
true,当前元素就会被保留到filter()返回的新数组里;如果返回false,就会被排除。 - 最后把这个筛选好的新数组赋值给
trueFriends,里面就全是标记为好友的对象啦。
这样写既符合filter()的设计初衷,代码也更简洁易读,再也不用自己写循环和push操作咯!
内容的提问来源于stack exchange,提问作者PBandJ333
相关产品推荐
相关产品推荐

