JS进阶 | 数组对象的操作

207 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第3天,点击查看活动详情

数组和对象的操作是日常开发中会频繁遇到的,for、foreach、map、filter...下面来总结一下,作为巩固复习,主要记忆遍历时参数的顺序(易写错)。

一、遍历:

1. for循环

for(let i; i < arr.length; i++)

2. for...of

for(const item of arr) {

}

当使用数组对象时搭配使用:

  • 得到数组的下标或者是key:keys()

  • 既想得到key也想得到value:entries()

    返回一个数组的迭代对象,该对象包含数组的键值对 (key:value)

    for (const [index, item] of arr.entries()){
        console.log(index,item)
    }

3. foreach

三个参数:(遍历的数组项,索引,遍历的数组)

arr.forEach((item, index, arr) => {
    console.log(item)
});

注意:不支持 continue 和 break语句的,如果想实现continue效果,可以使用 return

4. map

arr.map((item,index,arr)=>{

return item + 1

})

5. filter

主要用于过滤元素,返回未被过滤的元素

array.filter(function(currentValue,index,arr){
        return ...
});

注:

  • filter不会改变原数组;不会对空数组[ ]进行操作
  • 可以用filter过滤掉undefined、null等:newArray = arr.filter(item => item)

6. some() 、 every()

  1. some():
    • 遍历数组元素是否满足指定条件,如果有一个元素满足条件,返回true , 剩余的元素不会再执行
    • 不检测空数组,不改变原数组
  2. every():
    • 判断数组中是否每个元素都满足条件,必须全部满足才返回true;只要有一个不满足就返回false

树结构的操作

  1. 查找符合元素的根节点的父级

    思路:首先遍历数据到最后一层,子节点children数组为空(.children.length === 0),在上一步存储父节点的数据。

    注意:

    • map的时候,想要终止迭代,return;或者break;无效。返回值需要带有数据即可结束。

    • 当涉及到递归时,注意不要将存储查找结果的字段定义在函数中,以免被覆盖

  2. 判断对象是否包含某个key

  • 1、Object.keys(obj).includes('key1'); // true

  • 2、obj.hasOwnProperty("key3"); // false

    注:返回值为布尔类型,所以判断不包含某个字段,可以使用这种方式

  1. 数组删除

    需要注意在循环时如果删除循环本身的元素,索引值会改变(可考虑使用倒序操作)

  2. 其它

    pop、push、shift、unshift、fill、sort、reverse、splice会改变原数组