1. map
// 有返回值祭犯,返回一個(gè)新的數(shù)組忱辅,每個(gè)元素為調(diào)用func的結(jié)果。
let list = [1, 2, 3, 4, 5];
let other = list.map((d, i) => {
return d * 2;
});
console.log(other);
// [2, 4, 6, 8, 10]
2.filter
// 有返回值霉囚,返回一個(gè)符合func條件的元素?cái)?shù)組
let list = [1, 2, 3, 4, 5];
let other = list.filter((d, i) => {
return d % 2;
});
console.log(other);
// [1, 3, 5]
3.some
// 返回一個(gè)boolean捕仔,判斷是否有元素符合func條件,如果有一個(gè)元素符合func條件盈罐,則循環(huán)會(huì)終止榜跌。
let list = [1, 2, 3, 4, 5];
list.some((d, i) => {
console.log(d, i);
return d > 3;
});
// print: 1 0, 2 1, 3 2, 4 3
// return true
4.every
// 返回一個(gè)boolean,判斷每個(gè)元素是否符合func條件盅粪,有一個(gè)元素不滿足func條件钓葫,則循環(huán)終止,返回false票顾。
let list = [1, 2, 3, 4, 5];
list.every((d, i) => {
console.log(d, i);
return d < 3;
});
// print: 1 0, 2 1, 3 2
// return false
5.forEach
// 沒(méi)有返回值础浮,只針對(duì)每個(gè)元素調(diào)用func。
// 優(yōu)點(diǎn):代碼簡(jiǎn)介奠骄。
// 缺點(diǎn):無(wú)法使用break豆同,return等終止循環(huán)。
let list = [1, 2, 3, 4, 5];
let other = [];
list.forEach((d, i) => {
other.push(d * 2);
});
console.log(other);
// print: [2, 4, 6, 8, 10]
6.for in
// for-in循環(huán)實(shí)際是為循環(huán)“enumerable”對(duì)象而設(shè)計(jì)的戚揭,for in也可以循環(huán)數(shù)組诱告,但是不推薦這樣使用,for–in是用來(lái)循環(huán)帶有字符串key的對(duì)象的方法民晒。
// 缺點(diǎn):只能獲得對(duì)象的鍵名精居,不能直接獲取鍵值。
var obj = {a:1, b:2, c:3};
for (var prop in obj) {
console.log("obj." + prop + " = " + obj[prop]);
}
// print: "obj.a = 1" "obj.b = 2" "obj.c = 3"
7.for of
for of為ES6提供潜必,具有iterator接口靴姿,就可以用for of循環(huán)遍歷它的成員。也就是說(shuō)磁滚,for of循環(huán)內(nèi)部調(diào)用的是數(shù)據(jù)結(jié)構(gòu)的Symbol.iterator方法佛吓。
for of循環(huán)可以使用的范圍包括數(shù)組、Set和Map結(jié)構(gòu)垂攘、某些類(lèi)似數(shù)組的對(duì)象(比如arguments對(duì)象维雇、DOM NodeList對(duì)象)、后文的Generator對(duì)象晒他,以及字符串吱型。
有些數(shù)據(jù)結(jié)構(gòu)是在現(xiàn)有數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)上,計(jì)算生成的陨仅。比如津滞,ES6的數(shù)組铝侵、Set、Map都部署了以下三個(gè)方法触徐,調(diào)用后都返回遍歷器對(duì)象咪鲜。
- entries
entries() 返回一個(gè)遍歷器對(duì)象,用來(lái)遍歷[鍵名, 鍵值]組成的數(shù)組撞鹉。對(duì)于數(shù)組疟丙,鍵名就是索引值;對(duì)于Set鸟雏,鍵名與鍵值相同隆敢。Map結(jié)構(gòu)的iterator接口,默認(rèn)就是調(diào)用entries方法崔慧。 - keys
keys() 返回一個(gè)遍歷器對(duì)象,用來(lái)遍歷所有的鍵名穴墅。 - values
values() 返回一個(gè)遍歷器對(duì)象惶室,用來(lái)遍歷所有的鍵值。
這三個(gè)方法調(diào)用后生成的遍歷器對(duì)象玄货,所遍歷的都是計(jì)算生成的數(shù)據(jù)結(jié)構(gòu)皇钞。
// 字符串
let str = "hello";
for (let s of str) {
console.log(s); // h e l l o
}
// 遍歷數(shù)組
let list = [1, 2, 3, 4, 5];
for (let e of list) {
console.log(e);
}
// print: 1 2 3 4 5
// 遍歷對(duì)象
obj = {a:1, b:2, c:3};
for (let key of Object.keys(obj)) {
console.log(key, obj[key]);
}
// print: a 1 b 2 c 3
說(shuō)明:對(duì)于普通的對(duì)象,for...in循環(huán)可以遍歷鍵名松捉,for...of循環(huán)會(huì)報(bào)錯(cuò)夹界。
一種解決方法是,使用Object.keys方法將對(duì)象的鍵名生成一個(gè)數(shù)組隘世,然后遍歷這個(gè)數(shù)組可柿。
// entries
let arr = ['a', 'b', 'c'];
for (let pair of arr.entries()) {
console.log(pair);
}
// [0, 'a']
// [1, 'b']
// [2, 'c']