Javascript ';[对象对象]';信息输入。减少
我正在学习JS,并试图找出: 出现在[对象]控制台中的原因是什么Javascript ';[对象对象]';信息输入。减少,javascript,object,reduce,arrow-functions,Javascript,Object,Reduce,Arrow Functions,我正在学习JS,并试图找出: 出现在[对象]控制台中的原因是什么 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, fiel
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
,因此它将转换为“[对象]”
我不知道你想在那里做什么,但是如果你想通过下一个占位符(
${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}},
{}
)
where console.log()code btw?旁注:您说过您只是在学习JS,所以有一些建议:不要使用
reduce
,除非您正在进行函数编程,并且传递给reduce
的函数是在别处定义并重用的实用函数。如果您没有使用预定义的实用程序函数执行FP,只需使用循环即可。写起来更简单,读起来也更简单<代码>减少被过度使用。引用:“我几乎每次使用数组#reduce都感到遗憾。对我的旧代码的当前维护者来说,是的,这本应该是一个for循环,我很抱歉。”这是学习课程的任务,主要规则是只使用reduce。@Nurbek-那么,尽管课程可能提供正确的技术信息,但我不会依赖它来获得最佳实践