如何用.filter()从对象数组提取hidden为false的名称数组?
问题解答
你的filter使用不正确
filter方法的回调函数需要返回布尔值(true/false),用来判断当前元素是否保留到结果数组。你当前的代码逻辑完全反了:
- 当
array.hidden为true时,返回array.name(字符串会被转为true),这会保留hidden: true的对象; - 当
array.hidden为false时,回调函数无返回值(默认是undefined,转为false),反而会过滤掉你需要的元素。
正确实现方式
要得到仅含目标名称的数组,需要两步操作:
- 用
filter筛选出hidden: false的对象; - 用
map提取每个对象的name属性。
完整代码:
const myArray = [ {name: 'Bob', age: 22, hidden: false }, {name: 'Jessica', age: 60, hidden: false }, {name: 'Marley', age: 34, hidden: true }, {name: 'Michella', age: 12, hidden: false }, {name: 'Sam', age: 10, hidden: true } ]; const names = myArray .filter(item => !item.hidden) // 筛选隐藏状态为false的对象 .map(item => item.name); // 提取名称 console.log(names); // 输出:['Bob', 'Jessica', 'Michella']
可选的一步式实现(用reduce)
如果想在一次遍历中完成,可以使用reduce方法:
const names = myArray.reduce((result, item) => { if (!item.hidden) { result.push(item.name); } return result; }, []);
内容的提问来源于stack exchange,提问作者Udders
相关产品推荐
相关产品推荐

