将对象的值按其值推入另一个数组

问题描述 投票:-1回答:1

我从下面的程序中得到了意外的结果。 inputsoutputs数组都获得相同的值。从this以某种方式我知道这是传递引用的问题。我的问题是如何通过以下方法实现相同目标。感谢您的时间。

期望输入数组为[[{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);
javascript arrays multidimensional-array
1个回答
0
投票

在追加到输出之前,克隆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);
© www.soinside.com 2019 - 2024. All rights reserved.