我有一个对象数组。我将以下各项串联起来:
obj2 = [{ rowNumber:33, rows:[{item1:'ItemOne'}]}, { rowNumber:44, rows:[{item2:'ItemTwo'}]}]
===> new obj = [{ rowNumber:77, rows:[{item1:'ItemOne'},{item2:'ItemTwo'}]}]
这是我的代码
let newobj=obj2.reduce((current , next)=> {
current.rowNumber+next.rowNumber;
current.rows.push(next.rows);
return next;
});
console.log(JSON.stringify(newobj))
实际上只有第二个元素是什么
{"rowNumber":44,"rows":[{"item2":"ItemTwo"}]}
PS:我正在使用打字稿
答案 0 :(得分:4)
您没有更新current
对象(实际上应称为accumulator
)。另外,您要推送到current
,但要返回next
。这是固定版本。
let obj2 = [{ rowNumber:33, rows:[{item1:'ItemOne'}]}, { rowNumber:44, rows:[{item2:'ItemTwo'}]}];
let newobj = obj2.reduce((current , next) => {
current.rowNumber += next.rowNumber;
current.rows.push(...next.rows);
return current;
});
console.log(JSON.stringify(newobj))
我将在reduce函数中将变量名称固定为(acc, current) => {...}
只是为了遵守约定,这样很明显,您想使用current
更新acc
然后返回{ {1}}。
答案 1 :(得分:1)
如果您知道acc
数组的结构,则可以采用以下解决方案,该解决方案将是最终的单个对象,其总和为obj2
和行数组。 / p>
请看看:
rowNumbers
答案 2 :(得分:1)
我相信是因为您试图将最后一个元素 next 输入到第一个元素 current 。
如您所知,Reduce函数允许您采用数组并返回单个值。它使用最后一个值获得新值,一次对数组中的每个元素进行评估。
因此,您应该执行以下操作:
let obj2 = [{ rowNumber:33, rows:[{item1:'ItemOne'}]}, { rowNumber:44, rows:[{item2:'ItemTwo'}]}];
let newobj=obj2.reduce((current , next)=> {
next.rowNumber += current.rowNumber;
next.rows.push(current.rows);
return next;
});
console.log(newobj)
答案 3 :(得分:0)
尝试使用Javascript Array.concat()方法代替push()
您可以在这里查看:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/concat