[英]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);
这同时具有grouped
和counts
,因此如果您需要将它们全部组合在一起; 它也有。
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.