es6语法部分-强化后的数组
1、快速构建新数组
Array.of()
将参数中的所有值作为元素形成数组。如果参数为空,则返回空数组。
var a = 1,b = 'n', c = 2;
Array.of(); // []
Array.of(a); // [1]
Array.of(a, b, c); // [1, 'n', 2]
Array.from()
可以将类数组对象或可迭代(可遍历)对象转化为数组。类数组对象就是一种可遍历的对象,只要对象有length属性,而且有诸如0、1、2、3这样的属性,那么他就是类数组。
let obj1 = {
0: 'html',
1: 'css'
}
let obj2 = {
0: 'html',
1: 'css',
length: 2
}
let obj3 = {
0: 'html',
1: 'css',
length: 3
}
Array.from(obj1) // []
Array.from(obj2) // ['html', 'css']
Array.from(obj3) // ['html', 'css', undefined]
from方法还可以接收第二个参数,就是一个map回调函数,用于对每个元素进行处理,放入数组的是处理后的元素。
let obj = {
0: 'html',
1: 'css',
length: 2
}
Array.from(obj, function(item) {
return item + '---'
})
// ['html---', 'css---']
2、新的数组方法
find:查找数组中符合条件的元素,若有多个符合,则返回第一个。
let a1 = Array.of(1, 2, 3, 4, 5, 6)
let b1 = a1.find(x => x>4)
b1 // 5
findIndex:查找数组中符合条件的元素索引,若有多个符合,返回第一个。
let a1 = Array.of(1, 2, 3, 4, 5, 6)
let b1 = a1.findIndex(x => x>4)
b1 // 4
fill:将一定范围索引的数组元素内容填充为单个指定的值。
let a1 = Array.of(1, 2, 3, 4, 5, 6)
// 第一个参数:用来填充的值
// 第二个参数:被填充的起始索引
// 第三个参数:被填充的结束索引,没写默认到数组末尾
a1.fill(12, 1, 2) // [1, 12, 3, 4, 5, 6]
a1.fill(12, 1) // [1, 12, 12, 12, 12, 12]
copyWithin:将一定范围索引的数组元素修改为此数组另一指定范围索引的元素。
arr.copyWithin(target, startIndex, end)
target:目的起始位置
startIndex: 复制源起始位置,可以省略,可以为负数
end: 复制源结束位置,可以省略,可以为负数
let a1 = Array.of(0, 1, 2, 3, 4, 5, 6)
// 复制源包含起始位置,不包含结束位置
a1.copyWithin(1,5) // [0, 5, 6, 3, 4, 5, 6]
a1.copyWithin(1,5,6) // [0, 5, 2, 3, 4, 5, 6]
a1.copyWithin(1,-2) // [0, 5, 6, 3, 4, 5, 6]
a1.copyWithin(1,-2, -1) // [0, 5, 2, 3, 4, 5, 6]
entries:遍历。
let arr = ['html', 'css', 'js']
for (let a of arr.entries()) {
console.log(a)
}
// [0, 'html'] [1, 'css'] [2, 'js']
for (let [key, value] of arr.entries()) {
console.log(key, value)
}
// 0 'html'
// 1 'css'
// 2 'js'
keys:遍历键名。
values: 遍历键值。
let arr = ['html', 'css', 'js']
for (let i in arr.values()) {
console.log(i)
}
// html css js
for (let i of arr.values()) {
console.log(i)
}
// 0 1 2
3、数组复制
var arr = [1, 2, 3]
// 写法1
var arrNew = [...arr]
// 写法2
var [...arrNew] = arr