Перезапись значения при нажатии - PullRequest
0 голосов
/ 09 июня 2018

код, скопированный здесь

Я повторил свой код в приведенном выше примере, я ожидаю получить оп:

[{"data":[{"val":1}]},{"data":[{"val":2}]}]

, но мой результат

[{"data":[{"val":2}]},{"data":[{"val":2}]}]

Я не понимаю, почему, пожалуйста, помогите мне для углубленного знания по этой проблеме

Ответы [ 2 ]

0 голосов
/ 09 июня 2018

Немного неуверен в этом вопросе, но вы можете попробовать глубоко клонировать "clonedData", прежде чем вставлять в массив dataObj, и это должно решить выход.Я думаю, что JS назначается по ссылке.

вместо

var newObj = {};
newObj = clonedData;
dataObj.push(newObj);

использование

var newObj = JSON.parse(JSON.stringify(clonedData));
dataObj.push(newObj);
0 голосов
/ 09 июня 2018

Не уверен, чего вы пытались достичь, но в зависимости от последовательности вам нужно будет сделать копию объекта при push его использовании:

_.forEach([{a:1},{a:2}],function(acombination){
        console.log("acombination",acombination);
        _.find([1,2], function(aheader, headerindex) {
            /*Only for repeat the value*/
                if (aheader == 1) {
                    for (let i = 0; i < 2; i++) {
                      clonedData.data[headerindex].val = acombination.a;
                    }
                }
        });
        var newObj = {};
        newObj = clonedData;
        dataObj.push(JSON.parse(JSON.stringify(newObj))); 
       // I stringified and parsed to create a new copy. You were pushing the object and later changing the same object, which changed both the values.
});
console.log("Ss",JSON.stringify(dataObj))
...