首页 > 其他分享 >js中数组的各种遍历方式

js中数组的各种遍历方式

时间:2023-10-18 15:23:09浏览次数:51  
标签:arr 遍历 console log js item let 数组 Array

一、ES5中数组遍历方式

let arr = [1, 2, 3, 2, 4]

1、for循环

for (let i = 0; i < arr.length; i++) {
    console.log(arr[i])
}

// 1 2 3 2 4

2、forEach():没有返回值,调用数组的每个元素,并将元素传递给回调函数。

// 参数:item(必需)->当前元素
//      index(可选)->当前元素的索引值
//      array(可选)->当前元素所属的数组对象

arr.forEach(function (item, index, array) {
    console.log(item, index)
})

// 1 0
// 2 1
// 3 2
// 2 3
// 4 4
注意:
forEach 的代码块中不能使用 break、continue,它会抛出异常。

3、map():返回新的数组,按照原始数组元素顺序依次处理元素。

let res = arr.map(function (item, index, array) {
    return item + 1
})

console.log(arr, res)

// [1, 2, 3, 2, 4] 
// [2, 3, 4, 3, 5]

4、filter():返回符合条件所有元素的数组

let res = arr.filter(function (item, index, array) {
    return item == 2
})

console.log(arr, res)

// [1, 2, 3, 2, 4]
// [2, 2]

5、some():返回Boolean,检测数组中的元素是否满足指定条件

let res = arr.some(function (item, index, array) {
    return item == 4
})

console.log(arr, res)

// [1, 2, 3, 2, 4] true

6、every():返回Boolean,判断每个元素是否符合function条件

let res = arr.every(function (item, index, array) {
    return item == 2
})

console.log(arr, res)

// [1, 2, 3, 2, 4] false

7、reduce():接收一个函数作为累加器

  • 累加
// prev(必需)->初始值, 或者计算结束后的返回值。
// cur(必需)->当前元素

let sum = arr.reduce(function (prev, cur, index, array) {
    return prev + cur
}, 0) // 0 可选-传递给函数的初始值

console.log(arr, sum)

// [1, 2, 3, 2, 4] 12
  • 取最大
let max = arr.reduce(function (prev, cur, index, array) {
    return Math.max(prev, cur)
})

console.log(arr, max)

// [1, 2, 3, 2, 4] 4
  • 去重
let res = arr.reduce(function (prev, cur, index, array) {
    prev.indexOf(cur) == -1 && prev.push(cur)
    return prev
}, [])

console.log(arr, res)

// [1, 2, 3, 2, 4] 
// [1, 2, 3, 4]

8、for in

for (let index in arr) {
    console.log(arr[index]);
}

// 1 2 3 2 4
注意:
```js // 如果在Array上添加原型方法,for...in也会将其输出
Array.prototype.foo = function () { console.log('foo'); }
for (let index in arr) { console.log(arr[index]); }
// 1 2 3 2 4 / ƒ () { console.log('foo'); } / ```
for...in代码块中不能有 return,不然会抛出异常。

二、ES6中数组遍历方式

1、for..of

for (let val of [1, 2, 3]) {
    console.log(val);
}

// 1,2,3

乍一看觉得它并没有什么强大之处。这里就强调下for...of的来历和作用。

for (variable of iterable) {

}

of后面是iterable既不是for循环规定的array,也不是for...in规定的object,而是iterable。

如果查查 iterable 的含义就很直观的感受到 for...of 遍历的是一切可遍历的元素(数组、对象、集合)等。

for (let item of arr) {
    console.log(item);
}
// 1 2 3 2 4

for (let item of arr.values()) {
    console.log(item)
}
// 1 2 3 2 4

for (let item of arr.keys()) {
    console.log(item)
}
// 0 1 2 3 4

for (let [index, item] of arr.entries()) {
    console.log(index, item)
}
// 0 1
// 1 2
// 2 3
// 3 2
// 4 4
TIP
for...of是支持 break、continue、return的,所以在功能上非常贴近原生的 for。

2、Array.from()

Array.from() 方法从一个类似数组或可迭代对象创建一个新的,浅拷贝的数组实例。

console.log(Array.from('foo'));
// ["f", "o", "o"]

console.log(Array.from([1, 2, 3], x => x + x));
// Array [2, 4, 6]

语法:Array.from(arrayLike[, mapFn[, thisArg]])

| 参数 | 含义 | 必/可选 | | :-------: | :--------------------------------------------------: | :-----: | | arrayLike | 想要转换成数组的伪数组对象或可迭代对象 | 必 | | mapFn | 如果指定了该参数,新数组中的每个元素会执行该回调函数 | 可 | | thisArg | 可选参数,执行回调函数 mapFn 时 this 对象 | 可 |

将伪数组转换成真正的数组

let arrayLike = {
    0: '张三', 
    1: '30',
    2: '男',
    3: ['李四','王五','二麻子'],
    'length': 4
}
let res = Array.from(arrayLike)
console.log(res)

// ["张三", "30", "男",['李四','王五','二麻子']

具备 map 的功能

let res = Array.from(arr, item => item + 1)
console.log(res)

// [2, 3, 4, 3, 5]

3、Array.of()

Array.of() 方法创建一个具有可变数量参数的新数组实例,而不考虑参数的数量或类型。

Array.of(7); // [7]         // 创建一个具有单个元素 7 的数组
Array.of(1, 2, 3); // [1, 2, 3]

Array(7); // [ , , , , , , ]        // 创建一个长度为7的空数组
Array(1, 2, 3); // [1, 2, 3]

4、Array.prototype.find()

find()方法返回数组中满足提供的测试函数的第一个元素的值,否则返回 undefined。

let array = [1, 5, 12, 100, 8];

let found = array.find(function(item) {
    return item > 10;
});

console.log(found);

// 12

5、Array.prototype.findIndex()

findIndex()方法返回数组中满足提供的测试函数的第一个元素的索引。否则返回-1。

其实这个和 find() 是成对的,不同的是它返回的是索引而不是值。

let array = [1, 5, 12, 100, 8];

let found = array.findIndex(function(item) {
    return item > 10;
});

console.log(found);

// 2

标签:arr,遍历,console,log,js,item,let,数组,Array
From: https://www.cnblogs.com/itjeff/p/17772450.html

相关文章

  • JsonPath使用(Java)
    JsonPath使用(Java)Java有一些类似于jq的语法库和工具。其中一个叫做JsonPath,它允许使用类似于jq的语法来查询和操作JSON数据。可以使用JsonPath来提取特定的JSON字段、过滤数据、执行计算等操作。另外,还有一些其他的Java库和框架也提供了类似的功能,比如FastJson,Gson和Jackson。这......
  • 直播软件搭建,利用原生JS实现回到顶部以及吸顶效果
    直播软件搭建,利用原生JS实现回到顶部以及吸顶效果  <style>    .box1{      width:1200px;      height:800px;            margin:0auto;    }    .box2{      width:1200px; ......
  • cube.js oracle 新版本npm 包支持
    cube.js目前来说是越来越复杂了(不是代码多复杂,而且融合了不少三方语言,python,rust,nodeaddonjava)如果网络不是很好的情况下编译cube.js是极其痛苦的,而且不少依赖问题,cube.js实际上很早就支持oracle,但是今天oracle比较给力提供了基于node的原生实现这样node系统集成......
  • Node.js 21 版本已发布!
    本文翻译自Node.js21isnowavailable!,来源:TheNode.jsProject,略有删改。我们很高兴地宣布Node.js21的发布!亮点包括V8JavaScript引擎更新到11.8,稳定fetch和WebStreams,一个新的实验性标志来切换模块默认值(--experimental-default-type),一个内置的WebSocket客户端,我们的测......
  • C语言-数组初始化方式
    C语言-数组初始化方式#include<stdio.h>#include<string.h>//数组初始化intmain(){ //方式1:{0} intarr1[3]={0}; for(inti=0;i<3;i++){ printf("arr1[%d]=%d\n",i,arr1[i]); } //方式2:for循环 intarr2[3]; for(inti=0;i<3;i++)......
  • 用jstack导出线程信息,用jmap导出线程信息和堆数据信息
    jmap导出的*.hprof文件需要用jvisualvm.exe工具来查看(当然也有第三方的其他工具),jdk8之后的是不会自带了需要手动安装;jmap导出的文件里是包含了线程信息,但是没有jstack导出的多,比如jstack里还有具体等待哪个锁的信息,这个锁的对象类型,还能看到是哪个线程获得了这个锁locked;jmap使......
  • 整型数组逆序
    整型数组逆序由于int型数组没有实现comparator接口,所以不支持逆序排序,所以我们建数组的时候就建成Integer型就好了Scannerin=newScanner(System.in);inttarget=Integer.parseInt(in.nextLine());String[]split=in.nextLine().split("");Integer[]arr=n......
  • react 公司项目学习 【react+webpack+nw.js + mobx+react-intl 实现的多页面多语言win
    这几天突然要来个react项目;听说还比较复杂;项目组内就两个人会react还在忙,整组主要是用vue;这不,这种‘狗都不干’的事,被安排到我身上了,那就学吧;一、研究代码结构不得不说,这目录结构搞得有点复杂,算是我接触中除了乾坤和electron之外,相当复杂的了,慢慢阅读吧;看懂了,原来是react+web......
  • Node.js框架:通过nvm实现多个node版本共存使用
    一、环境部署1、nvm下载下载地址:https://github.com/coreybutler/nvm-windows/releases2、nvm安装打开安装程序后按流程走就行,中间的安装地址可以自定义调整。注:在选择node.js的路径时,默认路径为C盘里的安装路径,如果本地在该路径下已经安装过......
  • 【C语言】数组指针
    【C语言】数组指针顾名思义,数组指针是指向数组的指针。例如,p是一个指向含有3个int元素的一维数组的指针:int(*p)[3];//圆括号的优先级更高,让p先与*结合再与[]结合用法:#include<stdio.h>//voiddisplay1(intp[][3])//等价下行写法voiddisplay......