共计 3315 个字符,预计需要花费 9 分钟才能阅读完成。
数组 (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)开始向后查找 valuelastIndexOf 从 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)