假设我有一个对象数组 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/