Javascript 过滤和排序值

标签 javascript sorting filter

我正在尝试过滤和排序我的数据。它匹配数组中的所有值,它将位于数组的第一个。

const fruits = [
  {name: 'banana', vitamins: ['Vitamin_C2', 'Vitamin_B']},
  {name: 'orange', vitamins: ['Vitamin_B', 'Vitamin_A1', 'Vitamin_D']},
  {name: 'apple', vitamins: ['Vitamin_C2', 'Vitamin_C', 'Vitamin_B']},
]

const vitaminsArray = ['Vitamin_C2', 'Vitamin_C', 'Vitamin_B'];

function filterAndSort(vitaminsArray) {
 // enter amazing code here :P
}

// console.log(filterAndSort) expect output. it will filter vitamins object and sort the most on the first of the object.
[
 {name: 'apple', vitamins: ['Vitamin_C2', 'Vitamin_C', 'Vitamin_B']},
 {name: 'banana', vitamins: ['Vitamin_C2', 'Vitamin_B']},
 {name: 'orange', vitamins: ['Vitamin_B', 'Vitamin_A1', 'Vitamin_D']},
]

我试过过滤,但无法进行排序。这是我的代码。

const filtered = fruits.filter(fruit => {
  return vitaminsArray.some((type) => fruit.vitamins.includes(type));
})
  // output 
   [
     {name: 'banana', vitamins: ['Vitamin_C2', 'Vitamin_B']},
     {name: 'apple', vitamins: ['Vitamin_C2', 'Vitamin_C', 'Vitamin_B']},
     {name: 'orange', vitamins: ['Vitamin_B', 'Vitamin_A1', 'Vitamin_D']},
   ]

最佳答案

您可以按 intersection of the arrays 的长度排序vitaminsArrayvitamins。最长的结果意味着当前对象拥有来自 vitaminsArray

的最多项目

const fruits = [
  {name: 'banana', vitamins: ['Vitamin_C2', 'Vitamin_B']},
  {name: 'orange', vitamins: ['Vitamin_B', 'Vitamin_A1', 'Vitamin_D']},
  {name: 'apple', vitamins: ['Vitamin_C2', 'Vitamin_C', 'Vitamin_B']},
];

const vitaminsArray = ['Vitamin_C2', 'Vitamin_C', 'Vitamin_B'];

const filtered = fruits.filter(fruit => {
  return vitaminsArray.some((type) => fruit.vitamins.includes(type));
});

console.log("before sorting");
console.log(filtered);

const sorted = filtered.sort((a, b) => {
    return vitaminsArray.filter(value => b.vitamins.includes(value)).length - vitaminsArray.filter(value => a.vitamins.includes(value)).length;
})

console.log("after sorting");
console.log(sorted);

关于Javascript 过滤和排序值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65389689/

相关文章:

javascript - 如何在输入标签上用空格替换逗号?

javascript - 在 WordPress 模板中使用 Javascript 或 Jquery 添加基于 URL 的 CSS 类

java - 将元素插入排序列表

python - 如何在 Django ModelForm 中订购字段?

javascript - 仅使用位置隐藏右侧边栏

javascript - 单击该元素,但页面未相应地重新加载

mysql - Redis 排序 : How do I sort a redis hash key by given value?

html - 如何在 Firefox 中将 FILTER/MASK 应用于图像

c# - 用 * 过滤,这将限制所有以 Null 开头的值?

xcode - 从 NSArray 中删除不需要的数据