JavaScript对象数组没有正确推送

时间:2013-11-19 02:52:26

标签: javascript arrays object splice

我有一个包含120个对象的Array(oldArray)。 我想创建另一个Array(newArray),其第一个元素是oldArray的第一个元素。 看起来很简单,只是我的输出不是预期的。

var obj = oldArray[0];
newArray[0] = obj;
console.log(obj);
console.log(newArray);
console.log(newArray[0]);
console.log(oldArray);
console.log(oldArray[0]);

objnewArray[0]oldArray[0]都会在我的控制台中生成相同的结果 - 我想要使用的单个对象。

然而,

newArray显示oldArray的所有对象,而不仅仅是我认为obj包含的对象。 newArray.length == 1。控制台显示:[对象]

oldArray是我原来的数组。 oldArray.length == 120。控制台显示[对象,对象,...]

我尝试过很多东西,并没想到会挂在这上面。我以为它可能是newArray.push(oldArray[0])或者newArray[0] = oldArray.splice(0,1),但我尝试的一切似乎都在创造同样的问题。

使用对象数组是否有某种特殊技巧?

谢谢!

1 个答案:

答案 0 :(得分:2)

我试过复制你的问题,这些是我的结果:

var oldArray = ['a','b','c','d'];
var newArray = [];

var obj = oldArray[0]; // store the first value in a new variable
newArray[0] = obj; // push the variable's value to the first index of the new array

console.log(obj);
    // 'a'
console.log(newArray);
    // ['a']
console.log(newArray[0]);
    // 'a' (the same as obj)
console.log(oldArray);
    // ["a", "b", "c", "d"]
console.log(oldArray[0]);
    // 'a'

根据脚本的范围和oldArray中的数据,这些是正确的行为。您的测试用例未正确缩小或问题未反映在您的问题中。

由于我使用字符串而非对象进行测试,因此在您的特定用例中可能会有一些不同的行为,但提供一些有关oldArray内容的示例数据将极大地帮助您解决问题。