【JS】中一个对象数组按照另一个数组排序,若无则删除
时间: 2024-09-21 20:10:26 浏览: 49
在JavaScript中,如果你想按照另一个数组中的元素对一个对象数组进行排序,并且如果某个对象数组中没有对应的值就删除该对象,你可以使用`Array.prototype.sort()`方法结合`filter()`方法来实现。首先,你需要创建一个新的数组,只包含目标排序字段,然后将原始数组的每个对象的这个字段与新数组中的对应项进行比较。
这是一个基本示例:
```javascript
let arrayToSort = [
{ name: 'b', value: 5 },
{ name: 'a', value: 10 },
{ name: 'c', value: 7 }
];
// 另一个数组,用于排序依据
let sortKeys = ['value'];
// 创建新数组,只包含排序键
let keysArray = sortKeys.map(key => arrayToSort.find(item => item[key]));
// 对原始数组进行排序
arrayToSort = arrayToSort.sort((a, b) => {
let aVal = keysArray[keysArray.indexOf(a.name)];
let bVal = keysArray[keysArray.indexOf(b.name)];
if (typeof aVal === 'undefined') {
// 如果a的值不存在于排序依据中,则删除a
return 1;
} else if (typeof bVal === 'undefined') {
// 同理,如果b的值不存在,则删除b
return -1;
} else {
// 按照值进行正常排序
return aVal - bVal;
}
});
// 删除不存在值的对象
arrayToSort = arrayToSort.filter(item => typeof item.value !== 'undefined');
console.log(arrayToSort);
```
在这个例子中,`sort()`函数会先检查`value`是否存在,如果不存在,就将其视为较大的值(默认升序)。然后,过滤掉那些`value`属性不存在的对象。
阅读全文