javascript - 如何使用有关计数的信息获取对象数组中相同数据的计数

标签 javascript lodash

假设我有一个对象数组 arr1

arr1 = [{name: "name1",id: 1},{name: "name2",id: 1},{name: "name3",id: 4},{name: "name3 ",id: 3},{name: "name1",id: 5}]

我想要数组或对象形式的具有相同id的计数信息。

我尝试使用 for loop 、 map 和 Lodash 获取信息。 我得到了结果。但希望以任何有效的方式进行。

我的工作代码

const arr1 = [{name: "name1",id: 1},{name: "name2",id: 1},{name: "name3",id: 4},{name: "name3",id: 3},{name: "name1",id: 5}];

const arr2 = []
for (var i = 0; i < arr1.length; i++) {
  var obj = {}
  _.keys(arr1[i]).map(o => {
    obj[o] = arr1[i][o]
    obj["count"] = arr1.filter(a => {
      return a.id === arr1[i].id
    }).length
  })
  arr2.push(obj)
}
var arr3 = _.uniqBy(arr2, "id")

console.log(arr3);
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js"></script>

最佳答案

id 分组,并映射组。将每个组转换为一个对象,该对象基于组中的第一个对象 + 组的长度作为 count:

const arr = [{name: "name1",id: 1},{name: "name2",id: 1},{name: "name3",id: 4},{name: "name3",id: 3},{name: "name1",id: 5}];

const result = _(arr)
  .groupBy('id')
  .map(group => ({ ...group[0], count: group.length }))
  .value();
  
console.log(result);
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js"></script>

关于javascript - 如何使用有关计数的信息获取对象数组中相同数据的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67019831/

相关文章:

javascript - Bootstrap 导航菜单无法正常工作

javascript - JS 什么时候将 {} 解释为空 block 而不是空对象?

javascript - 如何使用 lodash 或任何其他更好的方法排除数组的某些值

javascript - Lodash debounce 触发每一个变化

javascript - 将对象数组转换为其属性的唯一组合数组

javascript - 在javascript数组中查找和修改深度嵌套的对象

javascript - EXTJS:如何从 JSON 文件加载 Ext.form.panel 项目配置

javascript - 在 twilio 中使用 javascript 将调用者置于保留状态并从保留状态恢复

javascript - 可拖动到网格的 3D 立方体

javascript - Lodash getOr 为 null