首頁  >  文章  >  web前端  >  JavaScript關於陣列的方法有哪些不同?

JavaScript關於陣列的方法有哪些不同?

php中世界最好的语言
php中世界最好的语言原創
2017-11-18 17:39:421959瀏覽

在JavaScript裡,有很多新增,移除,替換數組元素的方法,很多方法都能實現同一個功能,但是他們卻有很大的不同之處,今天我們就來對比一下,JavaScript裡的數組方法到底有什麼奧秘。

在JavaScript 提供了多種新增,移除,取代陣列元素的方法,但是有些會影響原來的陣列;有些則不會,它是新建了一個陣列。

注意:區分以下兩個方法的不同點:

array.splice() 影響原來的陣列

array.slice() 不影響原來的陣列


I. 新增:影響原始陣列

使用array.push() 和array.ushift() 新增元素會影響原來的陣列。

let mutatingAdd = ['a', 'b', 'c', 'd', 'e'];
mutatingAdd.push('f'); // ['a', 'b', 'c', 'd', 'e', 'f']
mutatingAdd.unshift('z'); // ['z', 'b', 'c', 'd', 'e' 'f']

II. 新增:不影響原始數組

兩種方式新增元素不會影響原始數組,第一個是 array.concat() 。

const arr1 = ['a', 'b', 'c', 'd', 'e'];
const arr2 = arr1.concat('f'); // ['a', 'b', 'c', 'd', 'e', 'f']  (注:原文有误,我做了修改 “.” ---> “,”)
console.log(arr1); // ['a', 'b', 'c', 'd', 'e']

第二種方法是使用JavaScript 的展開(spread)運算子,展開運算元是三個點(…)

const arr1 = ['a', 'b', 'c', 'd', 'e'];
const arr2 = [...arr1, 'f']; // ['a', 'b', 'c', 'd', 'e', 'f']  
const arr3 = ['z', ...arr1]; // ['z', 'a', 'b', 'c', 'd', 'e']

展開運算元會複製原來的陣列,從原陣列取出所有元素,然後存入新的環境。


III. 移除:影響原始陣列

使用array.pop() 和array.shift() 移除陣列元素時,會影響原來的數組。

let mutatingRemove = ['a', 'b', 'c', 'd', 'e'];  
mutatingRemove.pop(); // ['a', 'b', 'c', 'd']  
mutatingRemove.shift(); // ['b', 'c', 'd']

array.pop() 和 array.shift() 傳回被移除的元素,你可以透過一個變數來取得被移除的元素。

let mutatingRemove = ['a', 'b', 'c', 'd', 'e'];
const returnedValue1 = mutatingRemove.pop();  
console.log(mutatingRemove); // ['a', 'b', 'c', 'd']  
console.log(returnedValue1); // 'e'
const returnedValue2 = mutatingRemove.shift();  
console.log(mutatingRemove); // ['b', 'c', 'd']  
console.log(returnedValue2); // 'a'

array.splice() 也可以刪除陣列的元素。

let mutatingRemove = ['a', 'b', 'c', 'd', 'e'];  
mutatingRemove.splice(0, 2); // ['c', 'd', 'e']

就像 array.pop() 和 array.shift() 一樣,array.splice() 同樣傳回移除的元素。

let mutatingRemove = ['a', 'b', 'c', 'd', 'e'];  
let returnedItems = mutatingRemove.splice(0, 2);  
console.log(mutatingRemove); // ['c', 'd', 'e']  
console.log(returnedItems) // ['a', 'b']

IV. 移除:不影響原始數組

JavaScript 的 array.filter() 方法基于原数组创建一个新数组,新数组仅包含匹配特定条件的元素。
const arr1 = ['a', 'b', 'c', 'd', 'e'];
const arr2 = arr1.filter(a => a !== 'e'); // ['a', 'b', 'c', 'd'](注:原文有误,我做了修改)  
// 或者
const arr2 = arr1.filter(a => {  
  return a !== 'e';
}); // ['a', 'b', 'c', 'd'](注:原文有误,我做了修改)

以上程式碼的條件是“不等於 ‘e’ ”,因此新數組(arr2)裡面沒有包含 ‘e’。

箭頭函數的獨特性:

單行箭頭函數,’return’ 關鍵字是預設自帶的,不需要手動書寫。

可是,多行箭頭函數就需要明確地傳回一個值。

另一種不影響原始數組的方式是 array.slice()(不要與 array.splice() 混淆)。

const arr1 = ['a', 'b', 'c', 'd', 'e'];  
const arr2 = arr1.slice(1, 5) // ['b', 'c', 'd', 'e']  
const arr3 = arr1.slice(2) // ['c', 'd', 'e']

V. 替換:影響原始數組

如果知道要替換哪一個元素,可以使用 array.splice() 。

let mutatingReplace = ['a', 'b', 'c', 'd', 'e'];  
mutatingReplace.splice(2, 1, 30); // ['a', 'b', 30, 'd', 'e']  
// 或者
mutatingReplace.splice(2, 1, 30, 31); // ['a', 'b', 30, 31, 'd', 'e']

VI. 替換:不影響原始數組

可以使用 array.map() 建立一個新數組,並且可以檢查每個元素,根據特定的條件替換它們。

const arr1 = ['a', 'b', 'c', 'd', 'e']  
const arr2 = arr1.map(item => {  
  if(item === 'c') {
    item = 'CAT';
  }
  return item;
}); // ['a', 'b', 'CAT', 'd', 'e']

使用 array.map() 轉換資料

array.map() 是個強力方法,可以用來轉換數據,而不會污染原先的資料來源。

const origArr = ['a', 'b', 'c', 'd', 'e'];  
const transformedArr = origArr.map(n => n + 'Hi!'); // ['aHi!', 'bHi!', 'cHi!', 'dHi!', 'eHi!']  
console.log(origArr); // ['a', 'b', 'c', 'd', 'e']; // 原数组毫发无损

關於陣列的方法比較就這麼多,希望能幫助大家了解並且使用JS裡的陣列。


相關閱讀:

關於JS數組Array方法匯總

js數組去重方法匯總

解析angularjs數組的傳參方式

#

以上是JavaScript關於陣列的方法有哪些不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn