Javascript 根据包含其他数组中所有值的数组属性筛选对象数组
我有一个对象数组:Javascript 根据包含其他数组中所有值的数组属性筛选对象数组,javascript,sorting,underscore.js,Javascript,Sorting,Underscore.js,我有一个对象数组: const breeds=[{name:'Golden',气质:['friendly','kind','smart']},{name:'Husky',气质:['alert','limitly','温柔']},{name:'Yorkshire Terrier',气质:['bold','independent','kind']} 我想按照所选的“气质”对它们进行排序。假设用户同时选择了“善良”和“友好”,它应该只返回“金色” 我正在使用javascript和下划线,这是我迄今为止
const breeds=[{name:'Golden',气质:['friendly','kind','smart']},{name:'Husky',气质:['alert','limitly','温柔']},{name:'Yorkshire Terrier',气质:['bold','independent','kind']}
我想按照所选的“气质”对它们进行排序。假设用户同时选择了“善良”和“友好”,它应该只返回“金色”
我正在使用javascript和下划线,这是我迄今为止尝试过的:
//selected is an array of selected temperaments
//breeds is the array of objects
function filterTemperaments(selected, breeds) {
return _.filter(breeds, function (breed) {
if (!breed.temperament) breed.temperament = "";
const breedList = breed.temperament;
return breedList.includes(...selected);
}, selected);
}
这似乎只返回与所选阵列中第一个气质匹配的品种。例如,如果选择的是['kind','limitly']
,而品种是{name:'Golden',气质:['kind','somey']}
,则Golden仍然会返回为true,尽管与“limited”气质不匹配
有没有更好的解决办法?提前谢谢 您只能使用返回已选择气质的品种
const breeds=[{name:'Golden',气质:['friendly','kind','smart']},{name:'Husky',气质:['alert','limitly','温柔']},{name:'Yorkshire Terrier',气质:['bold','independent','kind']},
所选=['kind'、'friendly']
const filtered=brides.filter(b=>selected.every(s=>b.property.includes)))
console.log(已过滤)
使用过滤器
和每一个
都可以很容易地使用,以便知道是否有匹配项并返回匹配值
常数=[{
名称:“黄金”,
气质:[“友好”、“善良”、“聪明”]
}, {
名字:“哈士奇”,
气质:[“警觉”、“忠诚”、“温柔”]
}, {
名称:“约克郡梗”,
气质:[“大胆”、“独立”、“善良”]
}]
//“选定”是一组选定的气质
//品种是对象的数组
功能过滤器温度(选定,品种){
return brides.filter(({cristence})=>{//这里我只是为了得到气质而对对象进行构造。
返回所选的.every(选择=>气质.indexOf(选择)!=-1)
})
}
常数结果=过滤温度(['种类','友好'],品种);
console.log(result)
而不是every
它应该是some
,因为如果选择的是['limitly','smart'],你就不会得到结果,而你应该得到2个结果,因为有2条狗匹配这些选择。@Princeernandez但是OP想要匹配所选的每个气质:“假设用户同时选择了“善良”和“友好”“,它应该只返回“Golden”。@adiga是正确的,我正在寻找“every”。感谢您的快速回复!您完全正确,我对问题的第二个陈述理解错误。