繁体   English   中英

将数组中的值分组并计数到 object

[英]Group and count values in an array into an object

我有以下数组形式的信息

0: { first: "sea",      second: "deniz",   languageId: "English-Turkish"}
1: { first: "play",     second: "oynamak", languageId: "English-Turkish"}
2: { first: "swim",     second: "yuzmek",  languageId: "English-Turkish"}
3: { first: "foo",      second: "bar",     languageId: "German-Russian"}
4: { first: "computer", second: "l'ordi",  languageId: "English-French"}

我需要按languageId对它们进行分组并计算属于这些组的项目。 为此,我还有以下 Object,

export class stats{
    name: String;
    count: number;
}

最后,我需要以下信息;

0: { name: "English-Turkish",  count: 3 }
1: { name: "German-Russian",   count: 1 }
2: { name: "English-French",   count: 1 }

Array.reduce function 对我来说似乎是一个很好的方法,但无法弄清楚。 我该如何实施?

可悲的是,array.reduce 可能不是解决此问题的正确工具。

但这就是你要找的吗? 如果你需要经常使用它,你可以把它变成一个 function。

let items = [
  { first: "sea",      second: "deniz",   languageId: "English-Turkish"},
  { first: "play",     second: "oynamak", languageId: "English-Turkish"},
  { first: "swim",     second: "yuzmek",  languageId: "English-Turkish"},
  { first: "foo",      second: "bar",     languageId: "German-Russian"},
  { first: "computer", second: "l'ordi",  languageId: "English-French"},
];
let grouped = {};
for (let item of items) {
  let { languageId } = item;
  if (!(languageId in grouped)) {
    grouped[languageId] = [];
  }
  grouped[languageId].push(item);
}
let counts = Object.entries(grouped).map(([name, arr]) => ({ name, count: arr.length }));
console.log(counts);

这同时具有groupedcounts ,因此如果您需要将它们全部组合在一起; 它也有。

Array.reduce function 对我来说似乎是一个很好的方法,但无法弄清楚。 我该如何实施?

您可以使用.reduce()以更优雅的方式获得预期值,如下所示:

 const items = [ { first: "sea", second: "deniz", languageId: "English-Turkish"}, { first: "play", second: "oynamak", languageId: "English-Turkish"}, { first: "swim", second: "yuzmek", languageId: "English-Turkish"}, { first: "foo", second: "bar", languageId: "German-Russian"}, { first: "computer", second: "l'ordi", languageId: "English-French"}, ]; const result = items.reduce((acc, {languageId}) => { acc[languageId] = acc[languageId] || {name: languageId, count: 0}; // The more elegant way: acc[languageId]??= {name: languageId, count: 0}; acc[languageId]['count'] += 1; return acc; }, {}); console.log(Object.values(result));

reduce()方法对数组的每个元素执行一个化简器 function(您提供),从而产生一个 output 值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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