[英]Get count of same values in array of object
假设我有一个 object 数组:
const apple = [{"bookName" :'Harry Pottar',part:"1"},{"bookName" :'Harry Pottar',part:"2"},
{"bookName": 'LOTR',part:"1"},{"bookName": 'LOTR',part:"2"},{"bookName": 'LOTR',part:"3"}]
我想获取所有常见值的计数以及值名称:
Expected O/P : [{"Harry Pottar":2},{"LOTR":3"}]
为此,我尝试如下:
const id = "Harry Pottar";
const count = array.reduce((acc, cur) => cur.bookName === id ? ++acc : acc, 0);
由于这给出了计数,因此我可以获得每个 bookName 的计数。 但是我怎样才能实现我预期的 O/P 场景。
如果有人需要任何进一步的信息,请告诉我。
很高兴看到您了解.reduce
,您非常接近。 只需将结果保存到 hashmap(JS 中的普通 object)。
const array = [{"bookName" :'Harry Pottar',part:"1"},{"bookName" :'Harry Pottar',part:"2"},{"bookName": 'LOTR',part:"1"},{"bookName": 'LOTR',part:"2"},{"bookName": 'LOTR',part:"3"}]
const result = array.reduce((acc, item) => {
const key = item.bookName
if (!acc.hasOwnProperty(key)) {
acc[key] = 0
}
acc[key] += 1
return acc
}, {})
// not sure why you want the result to be multiple objects. But here you go:
const output = Object.entries(result).map(([key, value])=> ({ [key]: value }))
根据以书名作为关键字的数据创建 map,其中对应的值是 output 中所需的对象,计数设置为零(您可以使用对象动态属性的计算属性名称语法)。 然后再次迭代数据以增加计数器。 最后将 map 中的值提取到一个数组中:
const apple = [{"bookName":'Harry Pottar',part:"1"},{"bookName":'Harry Pottar',part:"2"}, {"bookName": 'LOTR',part:"1"},{"bookName": 'LOTR',part:"2"},{"bookName": 'LOTR',part:"3"}]; let map = new Map(apple.map(({bookName}) => [bookName, { [bookName]: 0 }])); for (let {bookName} of apple) map.get(bookName)[bookName]++; let result = Array.from(map.values()); console.log(result);
你非常接近。 不过,您不一定需要将这些对象放在数组中。 只需将书名作为属性键的 object 即可。 这将使管理变得更容易。
如果您想从该数据创建一个对象数组,您可以使用map
而不是Object.entries
的 Object.entries。
const apple = [{"bookName":'Harry Pottar',part:"1"},{"bookName":'Harry Pottar',part:"2"},{"bookName": 'LOTR',part:"1"},{"bookName": 'LOTR',part:"2"},{"bookName": 'LOTR',part:"3"}]; const out = apple.reduce((acc, { bookName }) => { // If the property doesn't exist, create it // and set it to zero, otherwise increment the value // of the existing property acc[bookName] = (acc[bookName] || 0) + 1; return acc; }, {}); console.log(out); const result = Object.entries(out).map(([ key, value ]) => { return { [key]: value }; }); console.log(result);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.