js、ES10对象数组,做若对象中包含a、b、c,判断如果a的值相同,则比较b的值,如果b也相同则保留下标最大的对象去除下标小的对象
时间: 2024-09-09 10:13:49 浏览: 49
在 JavaScript 中,特别是从 ES10 开始,可以使用 Array 的 `filter()`、`reduce()` 和 `findIndex()` 等方法来处理这种情况。假设你有一个对象数组 `arr`,其中每个对象都有键 'a', 'b', 和 'c',你可以按照以下步骤操作:
```javascript
// 假设 arr 是这样的对象数组
const arr = [
{ a: 1, b: 2, c: 'object1' },
{ a: 1, b: 4, c: 'object2' },
{ a: 1, b: 2, c: 'object3' },
// ...更多对象
];
// 首先找到具有相同'a'值的所有对象
let duplicates = arr.filter(obj => obj.a === arr[0].a);
// 使用 reduce() 函数来找出最大 'b' 值对应的索引
let maxIndex = duplicates.reduce((max, current, index) => {
if (current.b > duplicates[max].b) {
return index;
} else if (current.b === duplicates[max].b && index > max) {
// 如果 'b' 相同,选择下标更大的对象
return index;
}
return max;
}, 0);
// 最后使用 findIndex() 来获取最大 'b' 对应的对象,并从原数组中移除其他相同'a'和'b'的对象
const removedObject = arr.find(obj => obj.a === arr[0].a && obj.b === duplicates[maxIndex].b);
arr.splice(arr.findIndex(o => o === removedObject), 1);
// 结果是 'arr' 只保留了 'a'、'b' 和 'c' 字段都完全相同的对象,如果存在多个相同的,只保留一个
console.log(arr);
阅读全文