如何从对象数组中筛选包含数值大于15的对象?
过滤包含数值大于15属性的对象数组
原数组
const names = [ { name: 'Anna' }, { num: 27 }, { name: 'Valeria', age: 20}, { secondname: 'Wilson' }, { age: 12, name: 'Max' }, { weight:'50kg', height: '172cm', name: 'Nick' } ];
需求
创建新数组,包含原数组中任意属性值为数值且大于15的对象。
之前的尝试(仅判断指定属性,无法覆盖所有情况)
const number = arr.filter(a => a.num || a.age > 15); console.log(number);
通用解决方案
要实现对所有属性的检查,需要遍历对象的每一个属性值,判断是否存在符合条件的数值。可以结合 filter()、Object.values() 和 some() 方法完成:
const filteredArray = names.filter(obj => { // 遍历对象的所有属性值,只要有一个满足条件就保留该对象 return Object.values(obj).some(value => { return typeof value === 'number' && value > 15; }); }); console.log(filteredArray);
代码说明
filter():遍历原数组,仅保留回调函数返回true的对象Object.values(obj):提取当前对象的所有属性值,生成一个数组some():只要数组中存在至少一个元素满足「是数值类型且大于15」的条件,就返回true,确保对象只要有任意一个符合要求的属性就会被筛选出来
执行后,filteredArray 的结果为:
[ { num: 27 }, { name: 'Valeria', age: 20 } ]
内容的提问来源于stack exchange,提问作者Fernando Vasquez
相关产品推荐
相关产品推荐

