js Array ~

文章详细介绍了JavaScript中数组的创建方法如Array.of与newArray的区别,fill方法的使用,以及数组的各种原型方法,如pop、push、slice、forEach、map、filter等。还讨论了数组的扁平化处理flat和flatMap,以及reduce方法在数组去重中的应用。
摘要由CSDN通过智能技术生成

数组扩展

  • Array.of:和 new Array() 类似,如果参数只有一个不会当作数组的长度
const arr = new Array(1, 2, 3) // [ 1, 2, 3 ]
const arr2 = new Array(10) // [ <10 empty items> ]

const arr3 = Array.of(10) // [ 10 ]
const arr4 = Array.of('a', 'b', 'c') // [ 'a', 'b', 'c' ]
  • fill:定义内容,三个参数 ~ 初始值,开始下标,结束下标(不影响值)
const arr5 = new Array(5).fill('hello') // [ 'hello', 'hello', 'hello', 'hello', 'hello' ]
const arr6 = new Array(5).fill('hi', 2) // [ <2 empty items>, 'hi', 'hi', 'hi' ]
const arr7 = new Array(5).fill('你好', 1, 3) // [ <1 empty item>, '你好', '你好', <2 empty items> ]

原型方法

  • pop:删除最后一个元素、并返回删除元素
  • shirt:删除第一个元素、并返回删除元素
  • push:将值添加到最后、并返回长度
  • unshift:将值添加到最前、并返回长度
  • splice: 未删除任何元素返回空数组、删除元素以数组形式返回删除的元素
  • copyWithin:结束下标开始之后的元素从开始下标进行替换,参数 ~ 开始下标、结束下标
const arr = [1, 2, 3, 4]
console.log(arr.copyWithin(1, 2)) // [ 1, 3, 4, 4 ]
  • concat:返回拼接完成的新数组(可扁平化二维数组)
  • slice:截取
  • forEach:不支持 continuebreak,无返回值,针对每个元素调用 func
  • map:返回数组,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) // [101, 102, 103, 104, 105]
  • 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)) // [ 1, 2, 3, 4, 5 ]
const arr = [1, [2, 3], [4, 5, [6, 7, [8, 9, [10]]]]]
console.log(arr.flat(Infinity)) // [ 1 - 10 ]
  • faltMap ~ map 和 flat 的结合,既可以遍历也可以扁平化
const arr = [1, 2, 3, 4, 5]
const res = arr.flatMap(item => {
  return [item * 10]
})
console.log(res) // [ 10, 20, 30, 40, 50 ]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值