首页 > 其他分享 >ES6形式常用的数组遍历函数

ES6形式常用的数组遍历函数

时间:2022-09-30 10:40:32浏览次数:47  
标签:ES6 arr 遍历 log index age item 数组 name


文章目录


0. 给定一个数组

const arr = [{
name: '袁绍',
age: 33,
title: '本初',
index: 2
},
{
name: '曹操',
age: 40,
title: '孟德',
index: 1
},
{
name: '刘备',
age: 35,
title: '玄德',
index: 6
},
{
name: '马超',
age: 30,
title: '孟起',
index: 7
},
{
name: '张飞',
age: 28,
title: '翼德',
index: 3
},
{
name: '关羽',
age: 27,
title: '云长',
index: 4
},
{
name: '赵云',
age: 22,
title: '子龙',
index: 4
},
]

1. find():查找成员对象

用于找出第一个符合条件的数组成员。它的参数是一个回调函数,所有数组成员依次执行该回调函数,直到找出第一个返回值为true的成员,然后返回该成员。如果没有符合条件的成员,则返回undefined。find()返回的结果是一个对象

const obj1 = arr.find(item => item.age < 30)
const obj2 = arr.find(item => item.index == 4)
const obj3 = arr.find(item => item.title !== '玄德')
const obj4 = arr.find(item => item.name.indexOf('关', 0) !== -1)

console.log(obj1) //{"name": "张飞","age": 28,"title": "翼德","index": 3}
console.log(obj2) //{"name": "关羽","age": 27,"title": "云长","index": 4}
console.log(obj3) //{"name": "袁绍","age": 33,"title": "本初","index": 2}
console.log(obj4) //{"name": "关羽","age": 27,"title": "云长","index": 4}

字符串查找可参考​​这里​

2. findIndex():查找成员下标

返回第一个符合条件的数组成员的位置,如果所有成员都不符合条件,则返回-1。findIndex()返回的结果是一个整型的值

const index1 = arr.findIndex(item => item.age < 30)
const index2 = arr.findIndex(item => item.index == 4)
const index3 = arr.findIndex(item => item.title !== '玄德')
const index4 = arr.findIndex(item => item.name.indexOf('关', 0) !== -1)

console.log(index1) //4
console.log(index2) //5
console.log(index3) //0
console.log(index4) //5

3. filter():过滤数组

使用指定的回调函数测试所有数组元素,并创建一个包含所有通过测试的元素构成的新数组。filter()不改变原数组内容,返回的结果是一个新的数组

const arr1 = arr.filter(item => item.age < 30)
const arr2 = arr.filter(item => item.index == 4)
const arr3 = arr.filter(item => item.title !== '玄德')
const arr4 = arr.filter(item => item.name.indexOf('关', 0) !== -1)

console.log(arr1)
console.log(arr2)
console.log(arr3)
console.log(arr4)

返回值

ES6形式常用的数组遍历函数_javascript

注意:上边所述的函数都是有返回值的。因此,箭头函数体部分都是一个可以得到布尔值的表达式,而不是一个语句块{…}。当然也可以显式return一个具有布尔值的表达式。

4. forEach():迭代数组

遍历数组所有元素,利用回调函数对数组的每一个元素进行操作。不支持break或continue关键字。特别地,return只用于决定是否结束当前循环(不是整个循环),类似continue。forEach()仅是一个遍历操作,没有返回值——可理解为返回void。forEach()不会修改原来的数组。

let newArr = []
arr.forEach(item => {
if (item.age < 30) {
newArr.push(item.name)
}
})

newArr.forEach(item => {
console.log(item)
})
/* 输出:
张飞
关羽
赵云
*/

既然是操作,箭头函数体部分当然要使用{…}语句块形式。

let nb
arr.forEach(item => {
if (item.index === 4) { // 4可有两个呕!
nb = item.name
}
})

console.log(nb) // 赵云

//return到底有啥用?
let nb
arr.forEach(item => {
if (item.index === 4) {
nb = item.name
return
}
})

console.log(nb) // 还是输出:赵云

//再看
let nb
arr.forEach(item => {
if (item.index === 4) {
nb = item.name
return // 相当于continue
console.log(nb) //不被输出
}
})

特殊方法修改原数组内容

let test = arr.forEach((item, index,) => {
input[index] = item.age + 10
})
console.log(test) // 没有返回值
console.log(arr) // 原数组被改了

结果

ES6形式常用的数组遍历函数_遍历数组_02

5. some()和every():量词遍历

两个函数都遍历数组中的所有元素。两个函数都返回布尔值

  • some()
    存在量词,数组中只要存在(至少一个)满足条件的元素就返回true,否则返回false。
  • every()
    全称量词,数组中的元素必须都满足条件才返回true,否则返回false。
console.log(
arr.some(item => item.age > 39)
) // true

console.log(
arr.every(item => item.age < 30)
) // false

6. map():变换

依次处理数组中的每一个元素。每一个元素均被map()定义的回调函数进行变换,将变换后的元素再收集起来,最终返回一个新的数组
map()不会对空数组进行处理,不会改变原始数组。

const newArr = arr.map(item => item.name)
console.log(newArr) //["袁绍","曹操","刘备","马超","张飞","关羽","赵云"]

const newArr = arr.map(item => item.age > 30)
console.log(newArr) //[true,true,true,false,false,false,false]

const newArr = arr.map(item => item.age > 30? 'A':'B')
console.log(newArr) //["A","A","A","B","B","B","B"]

const newArr = arr.map(item => {
if (item.index < 4) {
return item
}
})

console.log(newArr)
/** 输出:
[
{
"name": "袁绍",
"age": 33,
"title": "本初",
"index": 2
},
{
"name": "曹操",
"age": 40,
"title": "孟德",
"index": 1
},
null,
null,
{
"name": "张飞",
"age": 28,
"title": "翼德",
"index": 3
},
null,
null
]
*/

const newArr = arr.map(item => item.age + 10)
console.log(newArr) // [43,50,45,40,38,37,32]

数组成员是对象的变换

const newArr = arr.map(item => {
let {name, age, title} = item
let elem = {
name,
age: age+10,
alias: title
}
return elem
})

console.log(newArr)

结果

ES6形式常用的数组遍历函数_javascript_03

7. reduce():规约

这里“规约”类似于SQL中的聚合函数。即把一个数组表达的集合聚合为一个值——多个值变一个值。该函数最终返回一个单值

// preVal:前一次调用reduce()的返回值;currVal:当前遍历到的数组元素
const totle = arr.reduce((preVal,) => {
return preVal + currVal.age
}, 0) // 0是初始值

console.log(totle) //215


标签:ES6,arr,遍历,log,index,age,item,数组,name
From: https://blog.51cto.com/u_15812550/5725437

相关文章

  • 提取数组中对象
    例如fileDate=[{deleteValue:0,downloadValue:0},{deleteValue:1,downloadValue:1},{deleteValue:2,downloadValue:0......
  • 判断数据是否类数组
    检测函数(临时记录)functionisArrayLikeObj(obj){//Fordocument.allif(getTypeString(obj)==='HTMLAllCollection'){returntrue;}if(obj===n......
  • Arrays类、冒泡排序、稀疏数组
    Arrays类数组的工具类java.util.Arrays由于数组对象本身并没有什么方法可以供我们调用,但API中提供了一个工具类Arrays供我们使用,从而可以对数据对象进行一些基本的操作......
  • js 创建数组 创建对象 删除数组指定对象
    varmaterielArr=[];//创建数组 varmateriel={};//创建对象 //添加到数组materiel.cInvCode=cInvCode;materiel.quantity=quantity;materiel.orderTyp......
  • 数组的使用、二维数组
    数组使用For-Each循环数组作方法入参数组作返回值多维数组多维数组可以看成是数组的数组,比如二维数组就是一个特殊的一堆数组,其每一个元素都是一个一维数组。二......
  • 442 数组中重复的数据
      方法1:原地修改数组1ans=[]2fornuminnums:3ifnums[abs(num)-1]<0:4ans.append(abs(num))5nums[abs(num)-1]*=-16return......
  • React函数组件和类组件的区别
    区别函数组件的性能比类组件的性能要高,因为类组件使用的时候要实例化,而函数组件直接执行函数取返回结果即可。为了提高性能,尽量使用函数组件。区别函数组件类组件是否有 ​......
  • JavaScript ES6常用基础知识总结
    ​ES6let与const及其相关块级作用域ES6新增了块级作用域,总结一句话大致就是:大括号{}包起来的代码块基本山都可以当做块级作用域。常见的有直接使用{}包起来:{vara=4}函数......
  • 448 找到所有数组中消失的数字
      方法1:1counter=set(nums)2N=len(nums)3res=[]4foriinrange(1,N+1):5ifinotincounter:6res.append(i)7returnres方法2:原......
  • 697 数组的度
     1、找到数组的度2、找到与nums相同度的最短连续子数组使用三个字典,left用于记录每个元素在数组中第一次出现的位置,right用于记录每个元素在数组中最后一次出现的位置......