加载中...

JS 数组和对象的遍历方式


一、ForEach()

forEach()方法对数组的每个元素执行一次给定的函数。
实例代码:

const array1 = ['a', 'b', 'c', 'd']

array1.forEach((item) => {
  console.log(item)
})

输出每一个item项:a , b , c , d
参数的解析

item 必需。当前元素的值。
index 可选。当前元素的数组索引。
arr 可选。当前元素所属的数组对象

二、普通for循环遍历

普通for循环遍历。
实例代码:

var a = [1, 2, true, 'b', 'd', 'z', 's'] //定义数组

for (var i = 0; i < a.length; i++) {
  //遍历数组

  console.log(a[i]) //返回[1,2,true,b,d,z,s]
}

参数的解析

写法:for(开始条件;结束条件;更改条件){循环体}

三、for in 循环遍历

for…in 正式写法为for(i in obj){}.
循环中的代码每执行一次,就会对数组的元素或者对象的属性进行一次操作

实例代码:

var person = { name1: 'Jack', name2: 'Tony', age: 25 } // 定义是个对象

var text = '' // 定义一个空字符串

for (var x in person) { //循环遍历
  text += person[x] + '-'
}

console.log(text) //输出:Jack-Tony-25-

参数的解析

obj:表式指定迭代的的对象
i :表式指定的变量可以是数组元素,也可以是对象的属性

四、for of 循环遍历

for…of语句在可迭代对象(包括 Array,Map,Set,String,TypedArray,arguments 对象等等)上创建一个迭代循环,调用自定义迭代钩子,并为每个不同属性的值执行语句

实例代码:

let iterable = [10, 20, 30];

for (let value of iterable) {
    value += 1;
    console.log(value);   输出: 11   21   31
}

语法

for ( i of obj ) {
// 处理
}

参数的解析

obj:被迭代枚举其属性的对象
i :在每次迭代中,将不同属性的值分配给变量。

注: for…of与for…in的区别

无论是for…in还是for…of语句都是迭代一些东西。

它们之间的主要区别在于它们的迭代方式。

for…in 语句以任意顺序迭代对象的可枚举属性。

for…of 语句遍历可迭代对象定义要迭代的数据。

实例:

Object.prototype.objCustom = function() {};
Array.prototype.arrCustom = function() {};

let iterable = [3, 5, 7];
iterable.foo = 'hello';

for (let i in iterable) {
  console.log(i); // logs 0, 1, 2, "foo", "arrCustom", "objCustom"
}

for (let i in iterable) {
  if (iterable.hasOwnProperty(i)) {
    console.log(i); // logs 0, 1, 2, "foo"
  }
}

for (let i of iterable) {
  console.log(i); // logs 3, 5, 7
}

每个对象将继承objCustom属性,并且作为Array的每个对象将继承arrCustom属性,因为将这些属性添加到Object.prototype ()和Array.prototype。由于继承和原型链,对象iterable继承属性objCustom和arrCustom。

此循环仅以原始插入顺序记录iterable 对象的可枚举属性。它不记录数组元素3, 5, 7 或hello,因为这些不是枚举属性。但是它记录了数组索引以及arrCustom和objCustom。

这个循环类似于第一个,但是它使用hasOwnProperty() 来检查,如果找到的枚举属性是对象自己的(不是继承的)。如果是,该属性被记录。记录的属性是0, 1, 2和foo,因为它们是自身的属性(不是继承的)。属性arrCustom和objCustom不会被记录,因为它们是继承的。

该循环迭代并记录iterable作为可迭代对象定义的迭代值,这些是数组元素 3, 5, 7,而不是任何对象的属性。


文章作者:
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 !