我有一个对象数组:
const Breeds=[{name: '金色', 气质: ['友善', '善良', '聪明']},{name: '哈士奇', 气质: ['警觉', '忠诚' ', '温柔']},{name: '约克夏犬', 气质: ['大胆', '独立', '善良']}]
我想按选定的“气质”对它们进行排序。假设用户同时选择了“kind”和“friend”,它应该只返回“Golden”。
我正在使用 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', 'loyal']
并且品种是 {name:'Golden', tempement: ['kind', 'smelly']}
,尽管不符合“忠诚”气质,但金色仍会回归真实
有更好的解决方案吗?提前致谢!!
最佳答案
您可以使用filter
仅返回那些具有 every
的品种气质选择
const breeds=[{name: 'Golden', temperament: ['friendly', 'kind', 'smart']},{name: 'Husky', temperament: ['alert', 'loyal', 'gentle']},{name: 'Yorkshire Terrier', temperament: ['bold', 'independent', 'kind']}],
selected = ['kind', 'friendly']
const filtered = breeds.filter(b => selected.every(s => b.temperament.includes(s)))
console.log(filtered)
关于javascript - 根据包含另一个数组中所有值的数组属性过滤对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54467320/