繁体   English   中英

获取 object 数组中相同值的计数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM