数组/字符串/对象遍历方法

97 阅读3分钟

for

  • 数组/类数组/字符串
  • break终止全部循环
  • continue终止本次循环,
  • return终止全部循环,但必须要在函数内,否则会报错。
 for (let i = 0; i < 10; i++) {
    if (i === 5) {
      continue // 不打印5
      // break // 012345
    }
    console.log(i)
  }
   function a() {
      for (let i = 0; i < 10; i++) {
        console.log(i) 0 1 2
        if (i === 2) {
          return i 
        }
      }
  }
  console.log(a()) // 2

for in

  • 数组/字符串/对象
  • 遍历key,数组是index,对象为键名
  • 遍历所有可枚举属性,包括从原型上继承来的
  • 同for, 支持break,continue
  • es6方法
   const obj = {
    name: 123,
   }
   Object.defineProperties(obj, { age: { value: 18 } }) // 此方法默认为不可枚举属性
   for (const key in obj) {
    if (obj.hasOwnProperty(key)) {
        console.log(key + ': ' + obj[key]); // 判断是否为自己的属性,不是原型对象上的
    }
   }

for of

  • 数组/类数组/字符串/Map/Set
  • 遍历值
  • 同for,支持break,contuine,return
  • 普通对象不可以,不是可迭代对象
  • 可迭代对象
  • es6方法
  const arr = [1, 2, 3]
  for (const value of arr) {
    if (value === 2) continue
    console.log(value)
  }
  for (const item of "sfsfsdf") { // 可遍历字符串
    console.log(item)
  }

forEach 数组

  • 不支持contine break
  • return 终止本次循环进入下一次循环,不用放在函数内(与for不同)
  • 没有返回值
 const arr = [1, 2, 3, 4, 5, 6]
  arr.forEach((item, index) => {
    if (item === 2) {
      return
    }
    console.log(item)
  })

every/some

  • 满足条件会终止遍历
  • 返回布尔值
let arr = [1, 2, 3, 4, 5];
let allPositive = arr.every(function(item) {
    return item > 0;
});
console.log(allPositive); // 输出 true
let hasNegative = arr.some(function(item) {
    return item < 0;
});
console.log(hasNegative); // 输出 false

map

  • 原数组不变
  • 返回新数组
let arr = [1, 2, 3, 4, 5];
let squares = arr.map(function(item) {
    return item * item;
});
console.log(squares); // 输出 [1, 4, 9, 16, 25]
let arr2 = [{a:1},{a:2}]
console.log(arr.map(i => i.a)) // [1,2]

filter

  • 满足条件的返回,返回新数组
let arr = [1, 2, 3, 4, 5];
let evenNumbers = arr.filter(function(item) {
    return item % 2 === 0;
});
console.log(evenNumbers); // 输出 [2, 4]

reduce/reduceRight

  • 遍历累加
  • reduce从左到右,reduceRight从右往左
  • 第一个参数为执行函数,第二个参数为累加结果
  • 累加结果可为字符串,数组,数组都可以
  • 执行函数4个参数分别为累加结果,当前项,原数组,当前索引
let arr = [1, 2, 3, 4, 5];
let sum = arr.reduce(function(accumulator, currentValue) {
    return accumulator + currentValue;
}, 0);
console.log(sum); // 输出 15

Object.keys()

  • 遍历对象键
  • 返回对象键数组
let obj = {
    name: 'John',
    age: 30,
    job: 'developer'
};
// 使用 Object.keys() 遍历对象的键
let keys = Object.keys(obj);
console.log(keys); // 输出 ['name', 'age', 'job']

Object.values()

  • 遍历对象值
  • 返回对象值数组
let obj = {
    name: 'John',
    age: 30,
    job: 'developer'
};
// 使用 Object.values() 遍历对象的值
let values = Object.values(obj);
console.log(values); // 输出 ['John', 30, 'developer']

Object.entries()

  • 遍历键值对
  • 返回键值对二维数组
let obj = {
    name: 'John',
    age: 30,
    job: 'developer'
};
// 使用 Object.entries() 遍历对象的键值对
let entries = Object.entries(obj);
console.log(entries); // 输出 [['name', 'John'], ['age', 30], ['job', 'developer']]

while/ do while 乱入这里

  • while满足条件才可执行,可能一次都不执行。
  • do while必会先执行一次。
  • 注意:必须要在代码块内将i改变,不变会无限循环卡死。
  let i = 0
  while (i < 10) {
    console.log(i) // 0 2 4 6 8
    i = i + 2
  }
  do {
    console.log(i) 
    i = i + 2
  } while (i < 10)