我正在尝试过滤和排序我的数据。它匹配数组中的所有值,它将位于数组的第一个。
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 的长度排序vitaminsArray
和 vitamins
。最长的结果意味着当前对象拥有来自 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/