使用lodash对数组中每一个对象根据messageId进行去重,去重时保留重复项最后一个
时间: 2024-02-01 14:02:19 浏览: 121
可以使用`_.uniqBy()`方法实现根据messageId进行去重,并且保留最后一个重复项。具体实现如下:
```javascript
const arr = [
{ messageId: 1, content: 'hello' },
{ messageId: 2, content: 'world' },
{ messageId: 1, content: 'goodbye' },
{ messageId: 3, content: 'foo' },
{ messageId: 2, content: 'bar' },
];
const result = _.uniqBy(_.reverse(arr), 'messageId');
console.log(result);
// Output: [
// { messageId: 3, content: 'foo' },
// { messageId: 1, content: 'goodbye' },
// { messageId: 2, content: 'bar' },
// ]
```
以上代码中,`_.reverse()`方法用于将数组倒序,这样使用`_.uniqBy()`方法进行去重时,会保留重复项的最后一个。最后再将数组倒序回来,得到最终结果。
相关问题
js对数组包裹对象,根据每个对象的id对数组进行去重,如何实现
可以使用数组的 reduce 方法来实现该功能。具体步骤如下:
1. 定义一个空对象,用于存储已经存在的 id 值;
2. 使用 reduce 方法对原数组进行遍历,遍历每个对象;
3. 判断当前对象的 id 值是否已经存在于定义的对象中;
4. 如果不存在,则将该对象添加到结果数组中,并将该对象的 id 值添加到定义的对象中;
5. 如果存在,则不将该对象添加到结果数组中。
代码示例:
```javascript
const arr = [{id: 1, name: 'Alice'}, {id: 2, name: 'Bob'}, {id: 1, name: 'Charlie'}, {id: 3, name: 'David'}, {id: 2, name: 'Eve'}];
const result = arr.reduce((acc, cur) => {
if (!acc.obj[cur.id]) {
acc.obj[cur.id] = true;
acc.arr.push(cur);
}
return acc;
}, { obj: {}, arr: [] }).arr;
console.log(result); // [{id: 1, name: 'Alice'}, {id: 2, name: 'Bob'}, {id: 3, name: 'David'}]
```
在这个示例中,`acc` 是一个对象,包含两个属性:`obj` 和 `arr`,分别用于存储已经存在的 id 和结果数组。在遍历原数组的过程中,如果当前对象的 id 不存在于 `obj` 中,则将该对象添加到 `arr` 中,并将该 id 添加到 `obj` 中;否则,不将该对象添加到结果数组中。最后,返回 `arr` 属性即为去重后的结果数组。
数组对象根据对象的一个属性进行去重
根据提供的引用内容,有三种主要的方法可以根据对象的一个属性对数组对象进行去重。
第一种方法是使用reduce函数。通过比较当前项与上一项的指定属性值,将不重复的项添加到结果数组中。具体实现代码如下:
```
const unique1 = (arr, key) => {
let item = arr !== next[key]) {
prev.push(next);
item = next;
}
return prev;
}, []);
};
console.log(unique1(resource, 'name'));
```
第二种方法是使用for循环。遍历数组,比较当前项与上一项的指定属性值,将不重复的项添加到新的数组中。具体实现代码如下:
```
const unique2 = (arr, key) => {
let item = arr !== arr[i][key]) {
newArr.push(arr[i]);
item = arr[i];
}
}
return newArr;
};
console.log(unique2(resource, 'name'));
```
第三种方法是使用Map数据结构。遍历数组,将指定属性值作为Map的键,将对应的项作为Map的值存储起来,最后返回Map的值数组即可。具体实现代码如下:
```
const unique3 = (arr, key) => {
const m = new Map();
for (const item of arr) {
if(!m.has(item[key])) {
m.set(item[key], item);
}
}
return [...m.values()];
};
console.log(unique3(resource, 'name'));
```
通过以上三种方法,都可以实现根据对象的一个属性对数组对象进行去重。
阅读全文