改变原数组的
ES5
-
push() //向数组的末尾添加一个或多个元素,返回新数组长度
语法:arr.push(element1[, ...[, elementN]])
-
pop() // 用于删除并返回数组的最后一个元素 如果数组为空,返回undefined
语法:arr.pop()
-
unshift() //返回新数组长度
-
shift() // 删除并返回数组的第一个元素 如果数组为空,返回undefined
语法:arr.shift()
-
sort() // 对数组的元素进行排序,返回改变后的数组
语法:arr.sort([compareFunction])
注意:compareFunction 指定定义排序顺序的函数。如果省略,则将数组元素转换为字符串,然后根据每个字符的Unicode代码点值进行排序。 -
reverse() // 用于颠倒数组中元素的顺序,返回改变后的数组
语法:arr.reverse()
-
splice() // 向数组中添加/删除/替换项目,返回删除的元素,如果仅删除一个元素,则返回一个元素的数组。如果没有删除任何元素,则返回一个空数组。
语法:array.splice(start[, deleteCount[, item1[, item2[, …]]]])
ES6
- copyWithin() // 在当前数组内部,将指定位置的成员复制到其他位置(会覆盖原有成员),然后返回当前数组。
语法:arr.copyWithin(target[, start[, end]])
- fill() // 给定值,填充一个数组,value代表填充的数值,start是开始的位置,end是结束的位置(不包括)
语法:arr.fill(value[, start[, end]])
返回新对象的
ES5
-
concat() // 连接两个或更多的数组,并返回结果。参数可以是数组或者值
语法:const new_array = old_array.concat([value1[, value2[, ...[, valueN]]]])
-
join() //把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔。参数不填默认逗号分隔
语法:arr.join([separator])
注意:如果元素是undefined,null一个空数组[],它被转换为一个空字符串。 -
slice()//从某个已有的数组返回选定的元素
语法:arr.slice([begin[, end]])
//包括begin,不包括end -
toString() // 把数组转换为字符串,并返回结果。数组中的元素之间用逗号分隔。
语法:arr.toString()
-
toLocaleString() // 把数组转换为本地数组,并返回结果。
语法:arr.toLocaleString([locales[, options]])
待扩展 -
Array.isArray(arr) //判断arr是否是一个数组类型
当Array.isArray不存在可以用Object.prototype.toString.call(arr) === ‘[object Array]’ -
indexOf() // 返回可以在数组中找到给定元素的第一个索引;如果不存在,则返回-1
语法:arr.indexOf(searchElement[, fromIndex])
-
lastIndexOf() //返回可以在数组中找到给定元素的最后一个索引;如果不存在,则返回-1。
语法:arr.lastIndexOf(searchElement[, fromIndex])
ES5 参数是一个callback
- every() // 如果回调函数每个数组元素都为true,返回一个true,否则,false。返回一个布尔值
语法:arr.every(callback(element[, index[, array]])[, thisArg])
注意:(修改,添加和删除)影响初始数组 - some() // 数组中的**至少一个元素为true,**返回true,否则,false,返回一个布尔值
语法:arr.some(callback(element[, index[, array]])[, thisArg])
- filter() // 返回通过测试的元素的新数组,没有通过测试的,返回一个空数组。
语法:let newArray = arr.filter(callback(element[, index[, array]])[, thisArg])
- reduce() // 最终返回一个值
语法:arr.reduce(callback( accumulator, currentValue[, index[, array]] )[, initialValue])
参数:accumulator:累加器,currentValue:当前值, initialValue:初始值 - reduceRight() // 从右到左累加 与reduce相反
语法:arr.reduceRight(callback(accumulator,currentValue [,index [,array]])[,initialValue])
ES6
- find() //用于找出第一个符合条件的数组成员
语法:arr.find(callback(element[, index[, array]])[, thisArg])
- findIndex() 返回第一个符合条件的数组成员的位置
语法:arr.findIndex(callback(element[, index[, array]])[, thisArg])
- includes() // 表示某个数组是否包含给定的值,返回一个布尔值
语法:arr.includes(valueToFind[, fromIndex])
- flat() //用于将嵌套的数组“拉平”,变成一维的数组。
语法:var newArray = arr.flat([depth])
可以将flat()方法的参数写成一个整数,表示想要拉平的层数,默认为1。
如果不管有多少层嵌套,都要转成一维数组,可以用Infinity关键字作为参数。 - flatMap() //方法对原数组的每个成员执行一个函数,flatMap()只能展开一层数组。
语法:var new_array = arr.flatMap(function callback(currentValue[, index[, array]]) { // return element for new_array }[, thisArg])
ES5其他
-
forEach() // 遍历数组,没有返回值,也不会改变原数组,
语法:arr.forEach(callback(currentValue [, index [, array]])[, thisArg])
注意:forEach()除了抛出异常外,没有其他方法可以停止或中断循环。如果您需要这种行为,该forEach()方法是错误的工具。
提前终止可以通过以下方式完成:
一个简单的for循环
一对…的 / 为…在 循环
Array.prototype.every()
Array.prototype.some()
Array.prototype.find()
Array.prototype.findIndex()
数组方法:every(),,some()和find(),并findIndex()使用返回真实值的谓词测试数组元素,以确定是否需要进一步迭代。 -
map() //遍历数组
语法:let new_array = arr.map(function callback( currentValue[, index[, array]]) { // return element for new_array }[, thisArg])
ES6其他
-
扩展运算符(…)
rest参数的逆运算,将一个数组转为逗号分隔的参数序列
// 注意:1、只有函数调用时,扩展运算符才可以放在圆括号中,否则会报错 2、替代函数的apply方法
// 应用:- 复制数组
- 合并数组(…为浅拷贝,concat也是浅拷贝)
- 与解构赋值结合
// ES5 a = list[0], rest = list.slice(1) // ES6 [a, ...rest] = list
- 字符串 : 扩展运算符还可以将字符串转为真正的数组。
[...'hello'] // [ "h", "e", "l", "l", "o" ]
扩展:识别四个字节的Unicode字符
- 实现了Iterator接口的对象
任何定义了遍历器(Iterator)接口的对象(参阅 Iterator 一章),都可以用扩展运算符转为真正的数组。
-
Array.from():用于将两类对象转为真正的数组:类似数组的对象(array-like object)和可遍历(iterable)的对象,将字符串转为数组
// Array.from还可以接受第二个参数,作用类似于数组的map方法,用来对每个元素进行处理,将处理后的值放入返回的数组Array.from(arrayLike, x => x * x); // 等同于 Array.from(arrayLike).map(x => x * x); Array.from([1, 2, 3], (x) => x * x) // [1, 4, 9]
-
Array.of() // 用于将一组值,转换为数组
语法:Array.of(element0[, element1[, ...[, elementN]]])
-
entries() // 用于遍历数组,是对键名的遍历
语法:array.entries()
-
keys() // 用于遍历数组,是对键值的遍历
语法:array.keys()
-
values() // 用于遍历数组,是对键值对的遍历
语法:array.values()
数组的空位
ES5
ES5 对空位的处理,已经很不一致了,大多数情况下会忽略空位。
- forEach(), filter(), reduce(), every() 和some()都会跳过空位。
- map()会跳过空位,但会保留这个值
- join()和toString()会将空位视为undefined,而undefined和null会被处理成空字符串。
ES6
-
Array.from方法会将数组的空位,转为undefined
-
扩展运算符(…)也会将空位转为undefined。
-
copyWithin()会连空位一起拷贝。
-
fill()会将空位视为正常的数组位置。
-
for…of循环也会遍历空位。
-
上面代码中,数组arr有两个空位,for…of并没有忽略它们。如果改成map方法遍历,空位是会跳过的。
-
entries()、keys()、values()、find()和findIndex()会将空位处理成undefined。
-如果原数组有空位,flat()方法会跳过空位
扩展:关于数组的一些面试题
参考链接
- 复制数组
- 合并数组
- 删除数组
- 数组去重
- 将字符串转为数组
- 将类数组转为数组
- 数组的遍历?有什么区别?