数组扩展
- Array.of:和 new Array() 类似,如果参数只有一个不会当作数组的长度
const arr = new Array(1, 2, 3)
const arr2 = new Array(10)
const arr3 = Array.of(10)
const arr4 = Array.of('a', 'b', 'c')
- fill:定义内容,三个参数 ~ 初始值,开始下标,结束下标(不影响值)
const arr5 = new Array(5).fill('hello')
const arr6 = new Array(5).fill('hi', 2)
const arr7 = new Array(5).fill('你好', 1, 3)
原型方法
pop
:删除最后一个元素、并返回删除元素shirt
:删除第一个元素、并返回删除元素push
:将值添加到最后、并返回长度unshift
:将值添加到最前、并返回长度splice
: 未删除任何元素返回空数组、删除元素以数组形式返回删除的元素copyWithin
:结束下标开始之后的元素从开始下标进行替换,参数 ~ 开始下标、结束下标
const arr = [1, 2, 3, 4]
console.log(arr.copyWithin(1, 2))
concat
:返回拼接完成的新数组(可扁平化二维数组)slice
:截取forEach
:不支持 continue
和 break
,无返回值,针对每个元素调用 funcmap
:返回数组,func 中 return 的结果find
:判断是否有元素是否符合 func 条件,返回第一个匹配到的元素filter
:返回符合 func 中判断条件的元素数组,和 map 的区别是返回元素本身,而非函数执行结果some
:判断是否有元素是否符合 func 条件,返回 Boolean 类型every
:判断每个元素是否符合 func 条件,返回 Boolean 类型findIndex
:判断是否有元素是否符合func条件,返回第一个匹配到的元素的索引
const arr = [1, 2, 3, 4, 5]
const res = arr.flatMap(item => {
return [item + 100]
})
console.log(res)
reduce
- 接收两个参数 func 和 初始值
- func 接收4个参数 ~ 上个循环返回值或初始值,当前元素,索引,源数组
const arrDedupReduce = (arr) => {
return arr.reduce(
function (prev, cur) {
prev.indexOf(cur) === -1 && prev.push(cur)
return prev
},
[arr[0]]
)
}
- for of:默认返回 values,内部没有实现迭代器协议不可遍历
for (let item of arr) {}
for (let item of arr.values()) {}
for (let item of arr.keys()) {}
for (let [index, item] of arr.entries()) {}
- for in:默认输出 key,会遍历原型下定义的方法
for (let item in arr) {}
for (let [key, item] of arr.entries()) {}
const obj = {
name: 'zhangsan',
age: 18
}
obj.__proto__.func = function () {}
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
console.log(obj[key])
}
}
- flat ~ 扁平数组,参数为扁平化深度(
Infinity
无限扁平)
const arr = [1, [2, 3], [4, 5]]
console.log(arr.flat(2))
const arr = [1, [2, 3], [4, 5, [6, 7, [8, 9, [10]]]]]
console.log(arr.flat(Infinity))
- faltMap ~ map 和 flat 的结合,既可以遍历也可以扁平化
const arr = [1, 2, 3, 4, 5]
const res = arr.flatMap(item => {
return [item * 10]
})
console.log(res)