Vin*_*rdo 3 javascript reduce typescript
我需要迭代一个字符串数组,计算每个字符串的出现次数,并返回一个包含值和出现次数的对象。
我正在尝试使用数组归约函数来实现这样的事情,但是,尽管进行了尝试,但我还无法实现这一点。
所以我有以下内容:
["tony", "tony", "tony", "tony", "kassandra", "tony", "tony", "kassandra"]
Run Code Online (Sandbox Code Playgroud)
我需要输出:
[{ name: "tony", matches: 6 }, { name: "kassandra", matches: 2 }]
Run Code Online (Sandbox Code Playgroud)
我应该使用什么来获得上述输出?
我已经尝试过以下方法:
const names = nameList.map((user) => user.name);
const reduce = names.reduce((p, c) => {
if (p == c) {
return { name: p, matches: `idk what put here yet` };
}
return c;
});
Run Code Online (Sandbox Code Playgroud)
小智 5
首先,统计数组中每个名称的出现次数。
其次,将其转换为具有所需格式的对象name及其matches.
const names = ["tony", "tony", "tony", "tony", "kassandra", "tony", "tony", "kassandra"];
const counts = {};
//1.
names.forEach(name => {
if (counts[name]) {
counts[name] += 1;
} else {
counts[name] = 1;
}
});
//2.
const result = Object.keys(counts).map(name => {
return {
name: name,
matches: counts[name]
};
});
console.log(result);Run Code Online (Sandbox Code Playgroud)
如果你想使用.reduce()方法来计算名称的出现次数:
const counts = names.reduce((acc, name) => {
acc[name] = (acc[name] || 0) + 1;
return acc;
}, {});
Run Code Online (Sandbox Code Playgroud)
另一种将事件转换回对象的方法是使用Object.entries()
Object.entries(counts).map(([name, matches]) => ({ name, matches }));
Run Code Online (Sandbox Code Playgroud)
两种方法相结合:
const counts = names.reduce((acc, name) => {
acc[name] = (acc[name] || 0) + 1;
return acc;
}, {});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
507 次 |
| 最近记录: |