简体   繁体   English

将对象数组按其值推送到另一个数组

[英]Push an array of objects by it's value to another array

I am getting unexpected results from my below program.我从下面的程序中得到了意想不到的结果。 Both inputs and outputs arrays are getting same value. inputsoutputs arrays 都获得相同的值。 Somehow from this I got to know that it's the problem of passing a reference.不知何故,我知道是传递参考的问题。 My question is how can I achieve the same with below approach.我的问题是如何通过以下方法实现相同的目标。 Appreciate your time.珍惜你的时间。

Expecting inputs array to be [[{id: 1, name: 'foo'}, {id: 2, name: 'bar'}], [{id: 1, name: 'foo'}]]期望输入数组为[[{id: 1, name: 'foo'}, {id: 2, name: 'bar'}], [{id: 1, name: 'foo'}]]

 var inputs = []; var outputs = []; var exampleArr = [{id: 1, name: 'foo'}, {id: 2, name: 'bar'}]; function analyze(listArr) { inputs.push(...listArr); outputs = [...outputs, ...listArr]; outputs.forEach((item) => { item.name = 'hello'; }); console.log('inputs', inputs); console.log('ouputs', outputs); listArr.pop(); if(listArr.length) analyze(listArr); } analyze(exampleArr);

Clone all objects in listArr (one nesting level only) before appending to outputs.在附加到输出之前克隆 listArr 中的所有对象(仅一个嵌套级别)。

 var inputs = []; var outputs = []; var exampleArr = [{id: 1, name: 'foo'}, {id: 2, name: 'bar'}]; function analyze(listArr) { inputs.push(...listArr); // clone objects in array, one level outputs = [...outputs, ...listArr.map(x=>typeof x==='object'? {...x}:x)]; outputs.forEach((item) => { item.name = 'hello'; }); console.log('inputs', inputs); console.log('ouputs', outputs); listArr.pop(); if(listArr.length) analyze(listArr); } analyze(exampleArr);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM