第78天 举例说明数组和对象的迭代方法分别有哪些?
arr.forEach((val, idx, arr) => { ... }, thisArg)for (let val of arr) { ... } for (let key in arr) { ... }for (let key in obj) { ... }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()获取对象属性名的集合
reduce((prev,cur, index))/reduceRight((prev, cur, index)):允许我们对数组前一项和当前项进行操作,自定义返回值类型
object
Object.keys(obj) 转为数组后在进行遍历array
forEach 遍历数组每一项,没有返回值
map 数组每一项的映射,所有的返回值组成一个新的数组
some 其中一个的意思,遍历数组中的每一项,有一个值返回为true ,则结果为true,否则为false
every 数组中的每一项都返回true,最终结果为true,否则为false
reduce 汇总的意思,里面三个参数,(prev, cur,start ) 将数组中的所有数据进行迭代,返回最终的结果
object
用的最多的就是for in
还知道 for of
以及 Object .keys();
for offor (let value of arr) {}
for infor (let index in arr) {}
forforEach 不过forEach遍历不能通过return结束遍历somearr.some(item => {
if (item == '终止条件') return true;
});
everyarr.every(item => {
if (item == '终止条件') return false;
return true;
})
map、reduce等for inObject.keysObject.valuesObject.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
Most helpful comment
arr.forEach((val, idx, arr) => { ... }, thisArg)for (let val of arr) { ... }for (let key in arr) { ... }for (let key in obj) { ... }for (let key of Object.keys(obj)) { ... }for (let [key, val] of Object.entries(obj)) { ... }