javascript - 根据包含另一个数组中所有值的数组属性过滤对象数组

标签 javascript sorting underscore.js

我有一个对象数组:

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/

相关文章:

javascript - 将 Jquery Accordion 转换为嵌套 Accordion

linux - 使用列条件在 uniq 之后打印行

javascript - 对对象数组中的项目进行分组和排序

javascript - 从 _.map() 返回唯一值

javascript - 变换 + 过渡(旋转)图像 x 度

javascript - 找不到 js.map 文件?

javascript - 如何从 wistia 视频中删除社交图标栏?

java - 使用 Collections 方法对类中的特定内容进行排序

c - int数组排序修改数组内容

javascript - Underscore JS 使用新对象的非空值扩展对象