Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 根据包含其他数组中所有值的数组属性筛选对象数组_Javascript_Sorting_Underscore.js - Fatal编程技术网

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”。感谢您的快速回复!您完全正确,我对问题的第二个陈述理解错误。