haizlin / fe-interview

前端面试每日 3+1,以面试题来驱动学习,提倡每日学习与思考,每天进步一点!每天早上5点纯手工发布面试题(死磕自己,愉悦大家),6000+道前端面试题全面覆盖,HTML/CSS/JavaScript/Vue/React/Nodejs/TypeScript/ECMAScritpt/Webpack/Jquery/小程序/软技能……

Home Page:http://www.h-camel.com

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

[js] 第78天 举例说明数组和对象的迭代方法分别有哪些?

haizhilin2013 opened this issue · comments

第78天 举例说明数组和对象的迭代方法分别有哪些?

  • Array
    • forEach method arr.forEach((val, idx, arr) => { ... }, thisArg)
    • for...of (Symbol.iterator) for (let val of arr) { ... }
    • for...in (Enumerable Keys) for (let key in arr) { ... }
  • Object
    • for...in (Enumerable Keys) for (let key in obj) { ... }
    • Object static method + for...of
      • for (let key of Object.keys(obj)) { ... }
      • for (let [key, val] of Object.entries(obj)) { ... }

ES5中为数组定义了5个迭代方法。每个方法都要接收两个参数:要在每一项上面运行的函数和(可选的)运行该函数的作用域对象---影响this的值。
1.every()和some();
every():对数组中的每一项运行给定函数,如果每一项都返回true,则返回true,否则false;
some():对数组中的每一项运行给定函数,如果至少有一项返回true,则返回true,否则false;
2.map()和filter();
filter():对数组中的每一项给定函数,返回值为true的项重新组成新的数组;
map():岁数组中的每一项给定函数,返回每一项调用这个函数的结果;
3.forEach();
forEach():对方法中的每一项运行给定函数。这个方法没有返回值;
迭代对象:
用for-in遍历对象
用for-of遍历类数组对象(ES6)
用Object.keys()获取对象属性名的集合

  • array:
  1. forEach((item, index)):无返回值,不可中断
  2. map((item,index)):map 不会修改原数组,返回一个新的数组。如果忘记写 return 就会返回 undefined
  3. filter((item,index)): filter 根据输入的条件将返回值为 true 的项重新组成数组返回出去
  4. some((item, index))/every((item, index)):都是对输入的条件进行判断,some 只要有一个满足就返回 true; every 是需要所有项都满足才返回 true
  5. reduce((prev,cur, index))/reduceRight((prev, cur, index)):允许我们对数组前一项和当前项进行操作,自定义返回值类型
  • object
  • 自己用的比较多的是 Object.keys(obj) 转为数组后在进行遍历
  1. for-in

array
forEach 遍历数组每一项,没有返回值
map 数组每一项的映射,所有的返回值组成一个新的数组
some 其中一个的意思,遍历数组中的每一项,有一个值返回为true ,则结果为true,否则为false
every 数组中的每一项都返回true,最终结果为true,否则为false
reduce 汇总的意思,里面三个参数,(prev, cur,start ) 将数组中的所有数据进行迭代,返回最终的结果
object
用的最多的就是for in
还知道 for of
以及 Object .keys();

Array

  1. for of
for (let value of arr) {}
  1. for in
for (let index in arr) {}
  1. for
  2. forEach 不过forEach遍历不能通过return结束遍历
  3. some
arr.some(item => {
  if (item == '终止条件') return true;
});
  1. every
arr.every(item => {
  if (item == '终止条件') return false;
  return true;
})
  1. mapreduce

Object

  1. for in

转成数组后使用数组遍历方法遍历

  1. Object.keys
  2. Object.values
  3. Object.getOwnPropertyNames

数组和对象的迭代方法现在一般只用es6里面的语法了
数组: arr.forEach((x,index) => {})
arr.map((x,index) => {})
arr.find(x => {}) 这个保持条件一直为假的话也可以用来迭代数组
arr.findIndex(x => {}) 同理,这个也是一样的
对象: Object.keys(obj) 获取键值,然后遍历键值来遍历数组
Object,values(obj) 直接获取到对象所有的value值
Object.entries(obj) 获取到对象的键值对数组,然后遍历数组就能遍历对象了

说一些能想到的知识点吧,感觉贤弟们说的不太全。
Array:
ES5
for;for-in;forEach(注意和for的区别,return 以及 async await 的情况下);some;map;every;filter;reduce;reduceRight;
ES6+
find;findIndex;for-of;

Object:
ES5
Object.keys;for-in;
ES6+
Object.values;Object.entries;
看其他答主知道的: getOwnPropertyNames

commented

说一些能想到的知识点吧,感觉贤弟们说的不太全。
Array:
ES5
for;for-in;forEach(注意和for的区别,return 以及 async await 的情况下);some;map;every;filter;reduce;reduceRight;
ES6+
find;findIndex;for-of;

Object:
ES5
Object.keys;for-in;
ES6+
Object.values;Object.entries;
看其他答主知道的: getOwnPropertyNames

Array: for、for in、for of、some、filter、every、reduce、find、forEach、map
Object:for in、Object.keys()、Object.entries()、Object.values()、Object.getOwnPropertyNames()