[英]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. inputs
和outputs
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.