Nid*_*mar 3 javascript arrays lodash
我有一系列如下所示的对象
[
{
"id": 27,
"unread_message_count": 0
},
{
"id": 27,
"unread_message_count": 7
}
]
Run Code Online (Sandbox Code Playgroud)
我使用 lodash uniqBy 删除重复项,如下所示
_.uniqBy(data, 'id')
Run Code Online (Sandbox Code Playgroud)
它删除了重复的值,如下所示,并返回结果,如下所示
{id:27,“未读消息计数”:0}
由于与第一个对象相比,第二个对象在 unread_message_count 中有一些更新的值。我想在 uniq 期间也更新 unread_message_count ,如下所示
let a = [{id: 27, unread_message_count: 0},{id: 27, unread_message_count: 7}];
_.uniqBy(a, 'id')
Output:
{id: 27, unread_message_count: 7}
Run Code Online (Sandbox Code Playgroud)
您可以反转数组,找到唯一值,然后反转回来:
const arr = [{id: 27, unread_message_count: 0},{id: 27, unread_message_count: 7}];
const result = _.reverse(_.uniqBy(_.reverse([...arr]), 'id'));
console.log(result);Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.20/lodash.min.js" integrity="sha512-90vH1Z83AJY9DmlWa8WkjkV79yfS2n2Oxhsi2dZbIv0nC4E6m5AbH8Nh156kkM7JePmqD6tcZsfad1ueoaovww==" crossorigin="anonymous"></script>Run Code Online (Sandbox Code Playgroud)
另一种选择是将数组简化为 Map,并始终从相同的项目中获取最新的对象:
const arr = [{id: 27, unread_message_count: 0},{id: 27, unread_message_count: 7}];
const result = Array.from(
arr.reduce(
(r, o) => r.set(o.id, o),
new Map()
).values());
console.log(result);Run Code Online (Sandbox Code Playgroud)