標籤:

數組的幾種迭代方法

在簡歷模板的項目中,涉及到了兩種遍歷 for-in 和 forEach。但主要使用 forEach 對模板中的JSON進行填充展示,這是為何呢?它們之間的區別在哪,對於數組的遍歷除了這兩種方法,還有其他迭代方法,接下來一一介紹。

for、do...while、while 這三種常見的方法就不做說明了

for-in

無序遍歷對象的可枚舉屬性

for (variable in object) {...}n

不僅能迭代自身屬性,還可以迭代它的原型屬性

for-in 中的 variable 是迭代的屬性名,而以下方法的 currentValue(或 item)指的某一項;在for-in 中輸出屬性值需用 object[variable],並非 object.variable

forEach

對數組的每個元素執行一次提供的函數,返回 undefined 值。按升序為數組中含有效值的每一項執行一次 callback 函數,那些已刪除(使用 delete 方法等情況)或未初始化的項將被跳過(但不包括那些值為 undefined 的項)。

array.forEach(callback(currentValue, index, array), this) {n // do somethingn}narray.forEach(callback[, thisArg])n

與 for-in 的區別在於 for-in 是無序的,forEach 是有序的

eg:

var numbers = [1,2,3,4,5,4,3,2,1];nvar forEachResult = numbers.forEach(function(item, index, array){n console.log(item);n});nalert(forEachResult); // undefinedn

map

對數組中的每一項運行給定函數,返回每次函數調用的結果組成的數組

let array = arr.map(function callback(currentValue, index, array){n // Return element for new_arrayn}[, thisArg]);n

此方法不改變調用它的原數組本身,適合創建包含的項與另一個數組一一對應的數組

eg:

var numbers = [1,2,3,4,5,4,3,2,1];nvar mapResult = numbers.map(function(item, index, array){n return item * 2;n});nalert(mapResult); // [2,4,6,8,10,8,6,4,2]n

filter

對數組中的每一項運行給定函數,返回該函數會返回 true 的項組成的數組

var new_array = arr.filter(callback[, thisArg])n

此方法不改變原數組,對查詢符合某些條件的所有數組項非常有用

eg:

var numbers = [1,2,3,4,5,4,3,2,1];nvar filterResult = numbers.filter(function(item, index, array){n return (item > 2);n});nalert(filterResult); // [3,4,5,4,3]n

every

對數組中的每一項運行給定函數,如果該函數對每一項都返回 true,則返回 true

arr.every(callback[, thisArg])n

此方法不改變原數組,用於查詢數組中的項是否滿足某個條件。傳入的函數必須對每一項都返回 true,這個方法才返回 true;否則,則返回 false

eg:

var numbers = [1,2,3,4,5,4,3,2,1];nvar everyResult = numbers.every(function(item, index, array){n return (item > 2);n});nalert(everyResult); // falsen

some

對數組中的每一項運行給定函數,如果該函數對每一項都返回 true,則返回 true

arr.some(callback[, thisArg])n

此方法不改變原數組,用於查詢數組中的項是否滿足某個條件。只要傳入的函數對數組中的某一項返回 true,就會返回 true。與 every的不同之處在於此,每一項與任一項

eg:

var numbers = [1,2,3,4,5,4,3,2,1];nvar someResult = numbers.some(function(item, index, array){n return (item > 2);n});nalert(someResult); // truen

總結:

  • every、some、filter 都用於條件查詢數組,前兩者與後者區別在於返回值
  • for-in、forEach 區別在於是否有序,for-in 除了用於數組,還可以迭代對象的屬性,而forEach 僅能迭代數組
  • forEach、map 區別在於返回值,前者返回 undefined,後者返回一個數組

參考:

for-in

forEach

map

filter

every

some


推薦閱讀:

如何給前端外行解釋 HTML5?
阿里雲前端周刊 - 第 32 期
Chrome擴展開發02--擴展中的基本操作01
阿里雲前端周刊 - 第 19 期

TAG:前端开发 |