數組的幾種迭代方法
在簡歷模板的項目中,涉及到了兩種遍歷 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:前端开发 |