JS 数组经常使用API要领和遍历要领总结

数组 (array)

ES5 *

map

语法:[].map(function(item, index, array) {return xxx})
功用:遍历数组,返回回调返回值构成的新数组,不转变原数组,不会对空数组举行检测

forEach

语法:[].forEach(function(item, index, array) {})
功用:没法break,可以用try/catch中throw new Error来住手,不转变原数组

filter

语法:[].filter(function(item, index, array) {})
功用:过滤,返回过滤后的数组,不转变原数组,不会对空数组举行检测

eg:

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,不转变原数组

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)

    原文作者:adaxxl
    原文地址: https://segmentfault.com/a/1190000018818174
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞