map
: 遍歷數組,返回回調函數返回值組成的新數組,不改變原數組forEach
:沒法break,能夠用try/catch中throw new Error來中止filter
:過濾some
:有一項返回true,則總體爲trueevery
:有一項返回false,則總體爲falsejoin
:經過指定鏈接符生成字符串push
/ pop
:末尾推入和彈出,改變原數組, 返回推入/彈出項unshift
/ shift
:頭部推入和彈出,改變原數組,返回操做項sort(fn)
/ reverse
:排序與反轉,改變原數組concat
:鏈接數組,不影響原數組, 淺拷貝slice(start, end)
:返回截斷後的新數組,不改變原數組splice(start, number, value)
:返回刪除元素組成的數組,value爲插入項,改變原數組indexOf
/ lastIndexOf(value, fromIndex)
:查找數組項,返回對應的下標reduce
/ reduceRight(fn(prev, cur), defaultPrev)
:兩兩執行,prev 爲上次化簡函數的return值,cur爲當前值(從第二項開始)instanceof
運算符是用來判斷一個對象的原型鏈中是否是能找到類型的 prototype
javascript
var arr = []; arr instanceof Array; // true
constructor
屬性返回對建立此對象的數組函數的引用,就是返回對象相對應的構造函數html
var arr = []; arr.constructor == Array; // true
var a = new Array(123); var b = new Date(); console.log(Array.isArray(a)); // true console.log(Array.isArray(b)); // false
這個在以前講判斷數據類型的文章裏說過,這裏再也不贅述。java
一般咱們會用循環的方式來遍歷數組。可是循環是 致使js 性能問題的緣由之一。通常咱們會採用下幾種方式來進行數組的遍歷
forEach算法
Set集合的特性之一是其集合中沒有重複的元素,所以能夠利用這一特性來實現數組去重的目的。舉例:chrome
var array2 = [...new Set([1,2,3,3,3,4,5])]; console.log(array2); // Array(5) [ 1, 2, 3, 4, 5 ]
let arr = Array(100000).fill(0).map((item, index) => index + 1);
arr.sort((a, b) => (Math.random() > 0.5 ? -1 : 1)); console.log(arr);
function shuffle(array) { let arrayLength = array.length, randomIndex, //隨機數 tempItem; //臨時存儲元素 for (let i = arrayLength - 1; i >= 0; i--) { randomIndex = Math.floor(Math.random() * (i + 1)); tempItem = array[randomIndex]; array[randomIndex] = array[i]; array[i] = tempItem; } return array; } console.log(shuffle(arr));
[1, [2, 3, [4, 5]]] ------> [1, 2, 3, 4, 5]
flat()方法按照一個能夠指定的嵌套深度的參數來遞歸遍歷數組,並將全部元素以及遍歷到的子數組裏面的元素合併返回一個新數組。數組
var arr = [true, function(){}, [{}, [2]]]; var newArr = arr.flat(2); console.log(newArr); // [true, ƒ, {…}, 2]
function flatten(arr) { var res = []; arr.map(item => { if(Array.isArray(item)) { res = res.concat(flatten(item)); } else { res.push(item); } }); return res; }
function flatten(arr) { while(arr.some(item=>Array.isArray(item))) { arr = [].concat(...arr); } return arr; }
使用數組的reduce方法,遍歷數組中的每個項,若是某一項是數組,則繼續遍歷,不然concat(鏈接數組);
舉例:dom
function flatten(arr) { return arr.reduce((result, item)=> { return result.concat(Array.isArray(item) ? flatten(item) : item); }, []); } var arr = [false, function(){}, [{}, [2]]]; var arr2 = [1, [2,3],4,[5,[6,7]]]; var newArr = flatten(arr); var newArr2 = flatten(arr2); console.log(newArr); // [false, ƒ, {…}, 2] console.log(newArr2); // [1, 2, 3, 4, 5, 6, 7]
實現數組扁平化的方法有不少,可是最核心的一點就是,遍歷數組,拿到數組的每一項,若是是數組,再繼續遍歷,直到每一項再也不是數組則中止。而後將這些項放到一個新的數組,最後將這個數組返回。數組降維,或者多維轉一維都和數組扁平化是一個道理。jsp
參考連接:
http://blog.poetries.top/FE-Interview-Questions/review/#_23-%E6%95%B0%E7%BB%84-array
http://www.javashuo.com/article/p-vgoowifc-cd.html
http://www.javashuo.com/article/p-vianslyj-cr.html https://juejin.im/post/5d391d336fb9a07ebe750343 http://www.javashuo.com/article/p-eergvfdv-h.html
http://www.javashuo.com/article/p-hlfxwuty-hq.html https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat