持续创作,加速成长!这是我参与「掘金日新计划 · 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()
- some():
- 遍历数组元素是否满足指定条件,如果有一个元素满足条件,返回true , 剩余的元素不会再执行
- 不检测空数组,不改变原数组
- every():
- 判断数组中是否每个元素都满足条件,必须全部满足才返回true;只要有一个不满足就返回false
树结构的操作
-
查找符合元素的根节点的父级
思路:首先遍历数据到最后一层,子节点children数组为空(.children.length === 0),在上一步存储父节点的数据。
注意:
-
map的时候,想要终止迭代,return;或者break;无效。返回值需要带有数据即可结束。
-
当涉及到递归时,注意不要将存储查找结果的字段定义在函数中,以免被覆盖
-
-
判断对象是否包含某个key
-
1、Object.keys(obj).includes('key1'); // true
-
2、obj.hasOwnProperty("key3"); // false
注:返回值为布尔类型,所以判断不包含某个字段,可以使用这种方式
-
数组删除
需要注意在循环时如果删除循环本身的元素,索引值会改变(可考虑使用倒序操作)
-
其它
pop、push、shift、unshift、fill、sort、reverse、splice会改变原数组