JS 數組經常使用API方法和遍歷方法總結

數組 (array)

ES5 *

map

語法:[].map(function(item, index, array) {return xxx})
功能:遍歷數組,返回回調返回值組成的新數組,不改變原數組,不會對空數組進行檢測segmentfault

forEach

語法:[].forEach(function(item, index, array) {})
功能:沒法break,能夠用try/catch中throw new Error來中止,不改變原數組數組

filter

語法:[].filter(function(item, index, array) {})
功能:過濾,返回過濾後的數組,不改變原數組,不會對空數組進行檢測函數

eg:prototype

const data = [-8, 9, 5, 3];
const res = data.filter(function(item) {
    if (item > 3) {
      return item
    }
});
console.log(res); // [9, 5]

some

語法:[].some(function(item, index, array) {})
功能:有一項返回true,則總體爲true,不改變原數組code

every

語法:[].every(function(item, index, array) {})
功能:須要所有符合條件才返回true,有一項返回false,則總體爲false,不改變原數組對象

join

語法:[].join(str)
功能:返回經過指定鏈接符str把數組鏈接成字符串,不改變原數組排序

push / pop

語法:[].push(item) / [].pop(item)
功能:數組末尾推入push和彈出pop,返回改變後數組的長度/彈出項,改變原數組繼承

unshift / shift

語法:[].unshift(item) / [].shift(item)
功能:數組頭部推入unshift和彈出shift,返回改變後數組的長度/彈出項,改變原數組索引

sort(fn) / reverse

語法:[].sort(fn) [].reverse()
功能:按規則排序與反轉,改變原數組原型鏈

splice

語法:[].splice(start, number, value1, value2...)
功能:返回刪除元素組成的數組,從start處開始刪除number個值後插入valueN參數列表到數組中,改變原數組

concat

語法:[].concat([])
功能:鏈接n(n >= 2)個數組,返回數組鏈接後的數組副本,淺拷貝,不改變原數組

slice

語法:[].slice(start, end)
功能:返回截斷後的新數組,不改變原數組

indexOf / lastIndexOf(value, fromIndex)

語法:[].indexOf(value[, fromIndex])
功能:
查找數組項
indexOf 從fromIndex(默認爲0)開始向後查找value
lastIndexOf 從fromIndex(默認爲-1)開始向前查找value
返回value對應的下標

reduce / reduceRight

語法:reduce / reduceRight(callback[, initialValue])
功能:兩兩執行,prev 爲上次化簡函數的return值,cur 爲當前值(從第二項開始)
callback 函數的參數:以前值(previousValue)、當前值(currentValue)、索引值(currentIndex)以及數組自己(array)
initialValue 可選的初始值,做爲第一次調用回調函數時傳給previousValue的值。也就是,爲累加等操做傳入起始值(額外的加值)

reduceRight是從數組的末尾開始

isArray *

語法:Array.isArray(value)
功能:用於肯定參數value是不是一個Array

ES6

find *

ind(fn)`
功能:返回符合條件的第一個數組元素item

findIndex *

語法:[].findIndex(fn)
功能:返回符合條件的第一個數組元素的索引

from *

語法:[].fill(value[, start, end])
功能:將相似數組的對象和可遍歷(iterable)的對象轉爲真正的數組
經常使用:

const set = new Set(3, 8, 9, 0)
Array.from(set)

entries *

語法:[].entries()
功能:返回迭代器:返回鍵值對

【注】Object.entries(obj)方法返回一個給定對象自身可枚舉屬性的鍵值對數組,其排列與使用 for...in 循環遍歷該對象時返回的順序一致(區別在於 for-in 循環也枚舉原型鏈中的屬性)【MDN】
[].entries()是Array.prototype上的方法
keys/values 相似

//數組
const arr = ['a', 'b', 'c'];
for(let v of arr.entries()) {
    console.log(v)
}
// [0, 'a'] [1, 'b'] [2, 'c']

//Set
const arr1 = new Set(['a', 'b', 'c']);
for(let v of arr1.entries()) {
    console.log(v)
}
// ['a', 'a'] ['b', 'b'] ['c', 'c']

//Map
const arr2 = new Map();
arr2.set('a', 'a');
arr2.set('b', 'b');
for(let v of arr2.entries()) {
    console.log(v)
}
// ['a', 'a'] ['b', 'b']

keys *

語法:[].keys()
功能:返回迭代器:返回鍵key(即上面的每一個數組中的第一個值)

values

語法:[].values()
功能:返回迭代器:返回值value(即上面的每一個數組中的第二個值)

includes *

語法:[].includes(val[, fromIndex])
功能:用於從fromIndex判斷數組中是否包含val,可替代ES5中的 indexOf

copyWithin

語法:[].copyWithin(target[, start[, end]])
功能:淺複製數組的一部分(start~end)到同一數組中的另目標位置target,返回改變後的數組,而不修改其大小;start默認爲0, end默認爲length-1; 改變原數組

of

語法:Array.of()
功能:建立一個具備可變數量參數的新數組實例,而不考慮參數的數量或類型

Array構造函數 & Array.of() 區別
實例說明

Array.of(7);       // [7] 
Array.of(1, 2, 3); // [1, 2, 3]

Array(7);          // [ , , , , , , ]
Array(1, 2, 3);    // [1, 2, 3]

fill

語法:[].fill(value[, start, end])
功能:用指定的元素填充數組,可用於初始化數組,返回改變後的數組,改變原數組
填充值(value),填充起始位置(start,默認爲0),填充結束位置(end,默認爲數組length)。

遍歷

數組

map/forEach/some/every/filter 見上

for

for...in

遍歷全部可枚舉屬性,經常使用於遍歷對象Object

for...of

遍歷全部可迭代iterable的對象

對象【屬性】

for...in

循環遍歷對象自身的和繼承的可枚舉屬性(不含Symbol屬性)【可枚舉 - Symbol】

Object.keys(obj)

返回一個數組,包括對象自身的(不含繼承的)全部可枚舉屬性(不含Symbol屬性)【自身可枚舉 - Symbol】

Object.getOwnPropertyNames(obj)

返回一個數組,包含對象自身的全部屬性(不含Symbol屬性,可是包括不可枚舉屬性)【自身 - Symbol】

Object.getOwnPropertySymbols(obj)

返回一個數組,包含對象自身的全部Symbol屬性【自身的Symbol】

Reflect.ownKeys(obj)

返回一個數組,包含對象自身的全部屬性,無論是屬性名是Symbol或字符串,也無論是否可枚舉 【自身全部】

參考 「乾貨」細說 Array 的經常使用操做(ES5 和 ES6)

相關文章
相關標籤/搜索