我想打印字符串和它的频率作为一个对象存储在一个数组中。我一直只使用reduce方法这样做,并希望通过相同的方法只的结果,谁能告诉我,我应该纠正以下代码:
const strings = ["pink", "red", "pink", "yellow", "yellow", "yellow"];
const frequencyOfStrings = (arrayOfStrings) => {
return arrayOfStrings.reduce((acc, curr) => {
if (acc[curr]) {
acc[curr]++;
} else {
acc[curr] = 1;
}
return acc;
}, []);
};
console.log(frequencyOfStrings(strings));
我得到的输出为:
[ pink: 2, red: 1, yellow: 3 ]
而我希望输出为:
[{ string: 'pink', frequency: 2 }, { string: 'red', frequency: 1 }, { string: 'yellow', frequency: 3 }]
到目前为止,我是一个Javascript的初学者,对时间复杂性一无所知。
3条答案
按热度按时间ohfgkhjo1#
要实现所需的输出格式,需要修改reduce函数,使其返回对象数组而不是对象。
h79rfbju2#
最好使用
foreach
来完成这项工作,但是您可以使用reduce
,但需要更改它内部的逻辑。在您想要的输出中,您需要
objects
的array
,因此在您的reduce
中,您需要在您的输出array
中查找正确的object
,然后更新它的frequency
,如果它与您的current
元素匹配,否则添加一个新的1
元素作为frequency
。这是应该如何是你的代码:
演示:
g6baxovj3#
为什么你坚持使用一个明显不适合这个工作的工具(
reduce
)呢?只要使用一个循环: