我需要帮助做以下事情。 我需要复制一个数组,更新一个值并将其插入一个新对象。
我的代码现在:
// 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
的价值总是看起来不错。
为什么最终结果失败,以及我在哪里覆盖我的数据。
答案 0 :(得分:1)
当您编写originalName = test
时,您告诉JS,originalName是测试的“别名”(两者共享相同的引用)。
行为是您在originaleName中更改的行为,它在测试中受到影响,反之亦然(行为仅适用于Array和Object)。
如果你想做一个真正的副本,最简单的方法(但有限制)是:
originalName = JSON.parse(JSON.stringify(test));
最后的事情:var originalName = {}
不是数组而是对象。它们之间存在一些重要的差异