javascript - Lodash uniqBy更新最新值

标签 javascript arrays lodash

我有一个像下面这样的对象数组

[
  {
    "id": 27,
    "unread_message_count": 0
  },
  {
    "id": 27,
    "unread_message_count": 7
  }
]

我使用 lodash uniqBy 删除重复项,如下所示

_.uniqBy(data, 'id')

像下面这样删除重复值并返回结果

{id: 27, "unread_message_count": 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}

最佳答案

您可以反转数组,找到唯一值,然后反转回去:

const arr = [{id: 27, unread_message_count: 0},{id: 27, unread_message_count: 7}];

const result = _.reverse(_.uniqBy(_.reverse([...arr]), 'id'));

console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.20/lodash.min.js" integrity="sha512-90vH1Z83AJY9DmlWa8WkjkV79yfS2n2Oxhsi2dZbIv0nC4E6m5AbH8Nh156kkM7JePmqD6tcZsfad1ueoaovww==" crossorigin="anonymous"></script>

另一种选择是将数组缩减为 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);

关于javascript - Lodash uniqBy更新最新值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64171841/

相关文章:

javascript - 使用 jquery 或 javascript 滚动到特定位置?

arrays - 如何正确地将 bash 数组扩展为参数

javascript - 如何在lodash中使用_.once()函数?

javascript - 对数组中的字符串值求和

javascript - 使用 jQuery 获取 div 中每个图像的源

javascript - Android webview在loadUrl方法中加载多个java脚本函数

python - 如何在numpy数组中找到最大负数和最小正数?

java - Object类型的数组,并比较数组内的对象

javascript - 如何在 lodash.template() 中取消转义 html 标签?

javascript - 使用 Lodash 进行深度合并