使用reduce javascript将字符串转换为对象



我正在尝试转换一个字符串,如"绵羊;转换成这样的对象:

{
"s":{
"initial":1,
"final":1
},
"h":{
"initial":1,
"final":1
},
"e":{
"initial":2,
"final":2
},
"p":{
"initial":1,
"final":1
}
}

目前我可以在javascript中使用reduce方法,并实现以下功能:

const names = 'sheep'.split('');
const count = (names) =>
names.reduce((acc, name) => ({ ...acc, [name]: (acc[name] || 0) + 1 }), {});
console.log(count(names)) //{ s: 1, h: 1, e: 2, p: 1 }

我试过阅读类似的帖子,但我对JS还很陌生。有人能帮我吗?谢谢

像这样尝试

const names = "sheep".split("");
const count = (names) =>
names.reduce(
(acc, name) => ({
...acc,
[name]: {
initial: (acc?.[name]?.initial ?? 0) + 1,
final: (acc?.[name]?.final ?? 0) + 1,
},
}),
{}
);
console.log(count(names));

这可以打印您想要的输出,但我不确定为什么您希望初始和最终计数是相同的

const letters = 'sheep'.split('');
const count = (letters) =>
letters.reduce((obj, letter) => ({ ...obj, [letter]: {initial: (obj[letter]?.initial || 0) + 1, final: (obj[letter]?.final || 0) + 1} }), {});
console.log(count(letters)) 

或者,您可以使用大括号扩展那里的函数,并执行一些if操作,以便使代码更可读,而不是使用ternaries

最新更新