本文整理自:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array
对比every(),some(),includes(),indexOf(),lastIndexOf(),find(),findIndex(),forEach(),map(),filter(),fill()
方法 | 作用 | 返回值 | 是否改变源Array | 核心参数 |
---|---|---|---|---|
every() | 是否所有元素都通过了指定函数的测试 | boolean | × | (…)=>boolean |
some() | 是否至少有一个元素通过了指定函数的测试 | boolean | × | (…)=>boolean |
includes() | 是否包含一个指定的值;使用===判定值是否相等 | boolean | × | any |
indexOf() | 功能同includes(),返回值为索引 | number | -1 | × | any |
lastIndexOf() | 功能同includes(),返回值为索引,顺序为从后往前 | number | -1 | × | any |
find() | 返回满足指定函数的第一个元素的值 | any | undefined | × | (…)=>boolean |
findIndex() | 功能同find(),返回值为索引 | number | -1 | × | (…)=>boolean |
forEach() | 遍历所有元素,执行指定函数 | undefined | × | (…)=>void |
map() | 遍历所有元素,执行指定函数后返回新数组 | Array | × | (…)=>any |
filter() | 遍历所有元素,返回满足指定函数的新数组 | Array | × | (…)=>boolean |
fill() | 元素覆盖为指定元素 | Array | √ | any |
一些使用说明
1,理论上说,所有的遍历都可以改变源数组,因为在核心参数中,如果是函数,则可以传入value/index/array,可以通过array[index]直接修改数组。但是建议不要使用,因为会影响他人对代码逻辑的判断;如果必须要通过此种方式修改,应当加以说明。
2,遍历所有元素时,均不可使用break语句。
3,某些方法功能相似,在代码中应当分优先级使用。例如优先使用forEach(),功能无法实现的再优先使用map()等。
4,数组的空位在遍历中处理规则非常不统一,这里不再多描述,建议在代码中完全避免空位的出现,数组在创建时通过fill()进行手动初始化。
5,性能最高的遍历方式就是普通for循环。