如何按指定值过滤对象数组?JS嵌套特征值过滤问题求解
问题原因
你代码的核心问题出在内层判断用了filter方法:filter始终返回数组,空数组在JS里属于真值,会被外层filter判定为符合条件,所以所有宠物对象都会被返回。
修复后的代码
把内层的filter替换为some方法即可,some会遍历数组只要有一个元素满足条件就返回布尔值true,否则返回false,正好匹配外层过滤的判断要求:
const pets = [ { name: 'dog', characteristics: [ { value: 'loyal' }, { value: 'big' } ] }, { name: 'cat', characteristics: [ { value: 'fluffy' }, { value: 'small' } ] }, ] function filterPets(pets, characteristic) { return pets.filter(function(pet) { // 改用some判断当前宠物的特征数组里是否存在匹配项 return pet.characteristics.some(o => o.value === characteristic); }) } console.log(filterPets(pets, 'loyal')); // 只会返回dog对应的对象
补充说明
如果你需要的是完全匹配特征值,用o.value === characteristic性能更好;如果需要模糊匹配(比如传入'loy'也能匹配到'loyal'),再保留o.value.includes(characteristic)写法即可。
内容的提问来源于stack exchange,提问作者user2953989
相关产品推荐
相关产品推荐

