这是我的Javascript代码:
var subRow = [];
var rowarr = [];
subRow.push({ v: "Jay" });
subRow.push({ v: "Ram" });
rowarr.push({ c: subRow });
subRow.length = 0;
subRow.push({ v: "Jay1" });
subRow.push({ v: "Ram1" });
rowarr.push({ c: subRow });
console.log(JSON.stringify(rowarr));
输出结果为:
[{
"c": [{
"v": "Jay1"
}, {
"v": "Ram1"
}]
}, {
"c": [{
"v": "Jay1"
}, {
"v": "Ram1"
}]
}]
预期输出为:
[{
"c": [{
"v": "Jay"
}, {
"v": "Ram"
}]
}, {
"c": [{
"v": "Jay1"
}, {
"v": "Ram1"
}]
}]
任何人都能解释为什么会这样吗?
答案 0 :(得分:4)
数组通过引用处理。
subRow.length = 0;
删除数组的内容。
rowarr
然后包含两个指向同一个数组的指针(在清空之后只有你放在那里的内容)
将subRow.length = 0;
更改为subRow = []
以处理新阵列,而不是修改现有阵列。
答案 1 :(得分:2)
subRow
指向一个对象。当您push
到rowArr
时,您会创建对该对象的引用。你把它推两次,这是对一个对象的两个引用。当您编辑subRow
时,对对象的两个引用都会看到更改,因此您已遍历对象的旧内容 - 它们不会存储在其他任何位置,因此它们完全丢失。您需要创建一个全新的对象,而不是编辑旧对象。