复制数组javascript拼接
我在我的代码中遇到了一个奇怪的bug,我无法理解它为什么会发生 我有一个数组1。我通过使array2等于array1来复制array1。然后,我使用splice修改array2以添加一个数字。Array1不应该被触碰?但两者都输出相同的变化复制数组javascript拼接,javascript,arrays,duplication,splice,Javascript,Arrays,Duplication,Splice,我在我的代码中遇到了一个奇怪的bug,我无法理解它为什么会发生 我有一个数组1。我通过使array2等于array1来复制array1。然后,我使用splice修改array2以添加一个数字。Array1不应该被触碰?但两者都输出相同的变化 var array1 = [0,1,2,3,4,5]; var array2 = array1; array2.splice(1,0,1) //add console.log(array1); console.log(array2); 我假设我混淆了数
var array1 = [0,1,2,3,4,5];
var array2 = array1;
array2.splice(1,0,1) //add
console.log(array1);
console.log(array2);
我假设我混淆了数组赋值?在不发生这种情况的情况下复制阵列的正确方法是什么
Cheers数组和对象通过引用进行复制。试试这个:
Object.prototype.clone = function() {
var newObj = (this instanceof Array) ? [] : {};
for (i in this) {
if (i == 'clone') continue;
if (this[i] && typeof this[i] == "object") {
newObj[i] = this[i].clone();
} else newObj[i] = this[i]
} return newObj;
}
var array1 = [0,1,2,3,4,5];
var array2 = array1.clone();
使用array1.concat()
复制数组,而不是传递对array1
的引用:
var array1 = [0,1,2,3,4,5];
var array2 = array1.concat();
array2.splice(1,0,1) //add
console.log(array1);
console.log(array2);
array.concat()
可以连接多个数组,但如果传递空参数,则实际上是在连接一个空数组:克隆数组
请注意,任何数组和对象元素仍然是引用:
var a = [ [1], 2];
var b = a.concat();
b[0][0] = 0;
console.log(b); // gives 0,2
console.log(c); // gives 0,2 too!
如果使用jQuery,可以执行以下操作:
var array1 = [0,1,2,3,4,5];
var array2 = array1.slice();
array2.splice(1,0,1) //add
console.log(array1);
console.log(array2);
检查此项。
clone()
不是本机javascript函数。array.clone
不是javascript内置函数,它是由Mootools在您的示例中提供的。干得好;这是做这件事的正确方法。请参见-->结果,如果我简单地执行“var array2=array1.splice();”,这将使其独立。真不敢相信我从来不知道这个…不要扩展Object.prototype-->