這個簡單的代碼適用於一維數組而不是多維的:無法複製多維數組
var a=[[0,0,0],[0,0,0],[0,0,0]];
var b=a.slice(0);
a[0][0]=2;
alert(b[0][0]);//Should display 0, but displays 2
我怎樣才能複製多維數組?
編輯:在這個例子中,尺寸爲2,但我真正的陣列的尺寸爲4
這個簡單的代碼適用於一維數組而不是多維的:無法複製多維數組
var a=[[0,0,0],[0,0,0],[0,0,0]];
var b=a.slice(0);
a[0][0]=2;
alert(b[0][0]);//Should display 0, but displays 2
我怎樣才能複製多維數組?
編輯:在這個例子中,尺寸爲2,但我真正的陣列的尺寸爲4
這裏有一個通用的解決方案,它可以適用於任何深度,並且假定你的數組實際上是數組,而不是數組類似的對象。
function clone(arr) {
arr = arr.slice()
for (var i = 0; i < arr.length; i++)
if (Array.isArray(arr[i]))
arr[i] = clone(arr[i])
return arr
}
的Array.isArray
方法,可以根據需要對舊版瀏覽器來勻。
if (!Array.isArray) {
Array.isArray = function(arr) {
return Object.prototype.toString.call(arr) === "[object Array]"
}
}
function clone(arr) {
return arr.map(function(item) {
if (Array.isArray(item))
return clone(item)
return item
})
}
這是一個使用.map()
而不是一個解決方案。使克隆
你只複製引用..使用循環
var a=[[0,0,0],[0,0,0],[0,0,0]];
var b= new Array()
for(i=0;i<a.length;i++)
b[i]=a[i].slice(0);
a[0][0] = 2
alert(b[0][0]);
alert(a[0][0]);
對不起,我忘了提及一些東西,看看我的編輯。 – Mageek
最簡單的方法是
function clone(array){
return JSON.parse(JSON.stringify(array));
}
作品的一切/除非你有函數和變量圓形任何尺寸。
實際深度總是「4」,還是可以變化? –
@CrazyTrain它總是4,但如果答案不是特定的那個維度,它會更好。 – Mageek