复制对象中的数组,然后根据键更新值 - Javascript

时间:2017-08-29 09:15:14

标签: javascript

我需要帮助做以下事情。 我需要复制一个数组,更新一个值并将其插入一个新对象。

我的代码现在:

// Sample test values {name:'The initial value', altName:'a first Name;a second name'}

var allAltName = test.altName;//Test come from a forEach() Iteration

        if (test.altName) {//First I check if ther is my parama altName
            var b,
                countAllAltName = allAltName.split(';'); //Here I split my parameter string based on ';'

            if (countAllAltName.length > 0) {
                for (b = 0; b < countAllAltName.length; b = b + 1) {
                    var originalName = {};//I create a new object
                    originalName = test;//I load my existing object into a blank object

                    if (!ret["Index"]) // I check if my final object Key exist
                        ret["Index"] = {}; // if not create new object
                    if (!ret["Index"]["Index"]) // check another key
                        ret["Index"]["Index"] = []; // if not create new
                    originalName.name = countAllAltName[b];//Update my new object originalName with new value

                    ret["Index"]["Index"].push(originalName); // push current element in the designated list

                    ret["Index"]["Index"].sort(function (a, b) {
                        return a.name.localeCompare(b.name);
                    });
                    console.log(ret);
                }
            }
        }

问题是ret包含所需的对象键,但每个aray中name的所有值都具有相同的最后一个值altName 我在每一步console.log()originalName的价值总是看起来不错。 为什么最终结果失败,以及我在哪里覆盖我的数据。

1 个答案:

答案 0 :(得分:1)

当您编写originalName = test时,您告诉JS,originalName是测试的“别名”(两者共享相同的引用)。

行为是您在originaleName中更改的行为,它在测试中受到影响,反之亦然(行为仅适用于Array和Object)。

如果你想做一个真正的副本,最简单的方法(但有限制)是:

originalName = JSON.parse(JSON.stringify(test));

最后的事情:var originalName = {}不是数组而是对象。它们之间存在一些重要的差异