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

Convert string into an object using reduce javascript

我正在尝试将像“sheep”这样的字符串转换成这样的对象:

{
   "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 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 以使代码比三元组更具可读性

这样试试

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));