1. 程式人生 > >JavaScript陣列的一些操作

JavaScript陣列的一些操作

有關陣列的增、刪、改、克隆的一些操作。

一、陣列新增元素(push)

看如下的例子:

let arr1 = ['1','2','3'];
arr1[3] = 'b';
console.log("陣列長度:" + arr1.length);
for(let i = 0; i < arr1.length; i++){
    console.log('arr1[' + i + ']:' + arr1[i]);
}

輸出結果為:

[Log] 陣列長度:4
[Log] arr1[0]:1
[Log] arr1[1]:2 
[Log] arr1[2]:3 
[Log] arr1[3]:b 

如上,手動指定索引及對應值可以達到增加陣列元素的效果,但通常動態處理過程中,我們需要用到push()。

說明:push() 方法可向陣列的末尾新增一個或多個元素,並返回新的長度。

示例如下:

let arr1 = ['1','2','3'];
console.log('陣列新長度' + arr1.push('b'));
for(let i = 0; i < arr1.length; i++){
    console.log('arr1[' + i + ']:' + arr1[i]);
}

輸出結果為:

[Log] 陣列新長度4 
[Log] arr1[0]:1 
[Log] arr1[1]:2 
[Log] arr1[2]:3 
[Log] arr1[3]:b

二、陣列元素的刪除

1. pop()

說明:pop() 方法將刪除 arrayObject 的最後一個元素,把陣列長度減 1,並且返回它刪除的元素的值。如果陣列已經為空,則 pop() 不改變陣列,並返回 undefined 值。

示例:

let arr1 = ['1','2','3'];
console.log('刪除的元素為:' + arr1.pop());
console.log('陣列新長度:' + arr1.length);
for(let i = 0; i < arr1.length; i++){
    console.log('arr1[' + i + ']:' + arr1[i]);
}

輸出結果為:

[Log] 刪除的元素為:3
[Log] 陣列新長度:2
[Log] arr1[0]:1 
[Log] arr1[1]:2 

2. splice

說明:splice() 方法向/從陣列中新增/刪除專案,然後返回被刪除的專案。

註釋:該方法會改變原始陣列。

語法:

arrayObject.splice(index,howmany,item1,.....,itemX)
引數描述
index必需。整數,規定新增/刪除專案的位置,使用負數可從陣列結尾處規定位置。
howmany必需。要刪除的專案數量。如果設定為 0,則不會刪除專案。
item1, ..., itemX可選。向陣列新增的新專案。

示例:

let arr1 = ['1','2','3'];
arr1.splice(0,1);
console.log("陣列長度:" + arr1.length);
for(let i = 0; i < arr1.length; i++){
    console.log('arr1[' + i + ']:' + arr1[i]);
}

輸出結果為:

[Log] 陣列長度:2 
[Log] arr1[0]:2 
[Log] arr1[1]:3 

清空陣列:ary.splice(0,ary.length);

3. delete

說明:這種刪除方式,被刪除項變為undefined,但陣列長度不變,也就是原來陣列的索引保持不變,與splice的這點不同特點,可以在特定的應用場景選擇使用。

示例:

let arr1 = ['1','2','3'];
delete arr1[0];
console.log("陣列長度:" + arr1.length);
for(let i = 0; i < arr1.length; i++){
    console.log('arr1[' + i + ']:' + arr1[i]);
}

輸出結果為:

[Log] 陣列長度:3 
[Log] arr1[0]:undefined 
[Log] arr1[1]:2 
[Log] arr1[2]:3 

可以發現,第一項元素變為了“undefined”,但陣列長度沒有改變,如果需要獲取非“undefined”的其他有效元素可以使用如下示例獲得:

for(let index in arr1){
    console.log('arr1[' + index + ']:' + arr1[index]);
}

輸出結果為:

[Log] arr1[1]:2
[Log] arr1[2]:3

三、陣列元素修改(刪除後新增)

陣列元素修改可以利用上述的splice方法實現,第三項引數可以輸入想要替換的值,效果是,在刪除元素所在的索引處新增新元素,當然,也可以新增多個元素。

示例:

let arr1 = ['1','2','3'];
arr1.splice(0,1,'a');
console.log("陣列長度:" + arr1.length);
for(let i = 0; i < arr1.length; i++){
    console.log('arr1[' + i + ']:' + arr1[i]);
}

輸出結果為:

[Log] 陣列長度:3 
[Log] arr1[0]:a
[Log] arr1[1]:2 
[Log] arr1[2]:3 

四、陣列的克隆

我們先來看一個例子:

let arr1 = ['1','2','3'];
let arr2 = new Array();
arr2 = arr1;
arr1[0] = 'a';
for(let i = 0; i < arr1.length; i++){
    console.log('arr1[' + i + ']:' + arr1[i]);
}
console.log('------------');
for(let i = 0; i < arr2.length; i++){
    console.log('arr2[' + i + ']:' + arr2[i]);
}

輸出結果為:

[Log] arr1[0]:a 
[Log] arr1[1]:2 
[Log] arr1[2]:3 
[Log] ------------ 
[Log] arr2[0]:a 
[Log] arr2[1]:2 
[Log] arr2[2]:3 

可以發現,通過賦值的方式將arr1陣列賦值給arr2陣列,在arr1陣列中的元素改變時,arr2相應索引處的元素也做了改變,這是因為arr2依然對arr1存在引用,而不是一個全新的陣列物件。

1. 迴圈遍歷、賦值。

若要克隆出一個全新的陣列物件,首先,迴圈遍歷、賦值,肯定可以實現:

let arr1 = ['1','2','3'];
let arr2 = new Array();
for(let i = 0; i < arr1.length; i++){
    arr2[i] = arr1[i];
}
    arr1[0] = 'a';
    for(let i = 0; i < arr1.length; i++){
    console.log('arr1[' + i + ']:' + arr1[i]);
}
console.log('------------');
for(let i = 0; i < arr2.length; i++){
    console.log('arr2[' + i + ']:' + arr2[i]);
}

輸出結果:

[Log] arr1[0]:a 
[Log] arr1[1]:2 
[Log] arr1[2]:3 
[Log] ------------ 
[Log] arr2[0]:1 
[Log] arr2[1]:2 
[Log] arr2[2]:3 

2. concat()

說明:concat() 方法用於連線兩個或多個數組。當連線空陣列時,便形成了一個新陣列物件。

示例:

let arr1 = ['1','2','3'];
let arr2 = new Array();
arr2 = arr1.concat();
arr1[0] = 'a';

for(let i = 0; i < arr1.length; i++){
    console.log('arr1[' + i + ']:' + arr1[i]);
}
console.log('------------');
for(let i = 0; i < arr2.length; i++){
    console.log('arr2[' + i + ']:' + arr2[i]);
}

輸出結果為:

[Log] arr1[0]:a 
[Log] arr1[1]:2 
[Log] arr1[2]:3 
[Log] ------------
[Log] arr2[0]:1 
[Log] arr2[1]:2
[Log] arr2[2]:3 

3. slice

說明:slice() 方法可從已有的陣列中返回選定的元素。

用法:

arrayObject.slice(start,end)

slice(0)表示返回已有陣列的所有元素,示例:

let arr1 = ['1','2','3'];
let arr2 = new Array();
arr2 = arr1.slice(0);
arr1[0] = 'a';

for(let i = 0; i < arr1.length; i++){
    console.log('arr1[' + i + ']:' + arr1[i]);
}
console.log('------------');
for(let i = 0; i < arr2.length; i++){
    console.log('arr2[' + i + ']:' + arr2[i]);
}

輸出結果為:

[Log] arr1[0]:a 
[Log] arr1[1]:2 
[Log] arr1[2]:3 
[Log] ------------ 
[Log] arr2[0]:1 
[Log] arr2[1]:2 
[Log] arr2[2]:3