.reduce 中的“[object Object]”消息

'[object Object]' message in .reduce

我正在学习 JS,并试图弄清楚: [object Object]控制台出现的原因是什么?

const arr = [true,1,'message1','message2']
const arr1 = arr.reduce(
    (acc, rec) => ({ ...acc, [`field${acc}${arr.indexOf(rec) + 1}`]: rec}),
{}
  )

控制台结果:

[object Object] {
  field[object Object]1: true,
  field[object Object]2: 1,
  field[object Object]3: "message1",
  field[object Object]4: "message2"
}

${acc} 在未标记的模板文字中会将 acc 转换为字符串。由于它是一个对象并且(显然)没有自定义 toString,它将转换为 "[object Object]".

我不确定你想在那里做什么,但如果你想通过你在下一个占位符 (${arr.indexOf(rec) + 1}) 中获得的索引索引到 acc,不要将它们分开,将它们放在 相同的 占位符中。

这是正确的:

const arr1 = arr.reduce(
    (acc, rec) => {return { ...acc, [`field${arr.indexOf(rec) + 1}`]: rec}},
{}
  )

此外,您需要知道更好的方法,将添加第三个参数 "index" 来替换 "arr.indexOf(rec)",因此代码将如下所示:

const arr1 = arr.reduce(
    (acc, rec, index) => {return { ...acc, [`field${index + 1}`]: rec}},
{}
  )