[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) { ... }
- forEach method
- 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)) { ... }
- for...in (Enumerable Keys)
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:
- forEach((item, index)):无返回值,不可中断
- map((item,index)):map 不会修改原数组,返回一个新的数组。如果忘记写 return 就会返回 undefined
- filter((item,index)): filter 根据输入的条件将返回值为 true 的项重新组成数组返回出去
- some((item, index))/every((item, index)):都是对输入的条件进行判断,some 只要有一个满足就返回 true; every 是需要所有项都满足才返回 true
- reduce((prev,cur, index))/reduceRight((prev, cur, index)):允许我们对数组前一项和当前项进行操作,自定义返回值类型
- object
- 自己用的比较多的是
Object.keys(obj)
转为数组后在进行遍历
- 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
for of
for (let value of arr) {}
for in
for (let index in arr) {}
for
forEach
不过forEach遍历不能通过return结束遍历some
arr.some(item => {
if (item == '终止条件') return true;
});
every
arr.every(item => {
if (item == '终止条件') return false;
return true;
})
map
、reduce
等
Object
for in
转成数组后使用数组遍历方法遍历
Object.keys
Object.values
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
说一些能想到的知识点吧,感觉贤弟们说的不太全。
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()