forEach
array.forEach(function(currentValue, index, array){
//code something
});
- forEach() 方法用于遍歷數(shù)組的每個(gè)元素堤魁,并將元素傳遞給回調(diào)函數(shù)
- 沒有返回值(返回undefined)
- 基本類型數(shù)組喂链,不可改變。引用類型數(shù)組(除String類型)姨涡,可以改變
使用場(chǎng)景:并不打算改變數(shù)據(jù)的時(shí)候,而只是想用數(shù)據(jù)做一些事情 吧慢,比如存入數(shù)據(jù)庫(kù)或則打印出來(lái)涛漂。
map
array.map(function(currentValue, index, array){
return func(currentValue);
});
- map()用來(lái)做一次統(tǒng)一映射
- 不改變?cè)瓟?shù)組,生成新的數(shù)組检诗,新數(shù)組元素個(gè)數(shù)不變匈仗,但是按照一定的條件轉(zhuǎn)換,數(shù)組元素發(fā)生了變化
使用場(chǎng)景:適用于你要改變數(shù)據(jù)值的時(shí)候
filter
array.filter(function(currentValue, index, array){
return func(currentValue);
});
- filter()用來(lái)做一次篩選逢慌,把傳入的函數(shù)依次作用于每個(gè)元素悠轩,然后根據(jù)返回值是true還是false決定保留還是丟棄該元素
- 不改變?cè)瓟?shù)組,生成新數(shù)組攻泼,新數(shù)組元素個(gè)數(shù)可能發(fā)生了改變火架,但是數(shù)組元素不會(huì)發(fā)生改變
使用場(chǎng)景:適用于你要過(guò)濾數(shù)據(jù)值的時(shí)候
舉例:(數(shù)據(jù)去重)
var aa = ['apple', 'strawberry', 'banana', 'pear', 'apple', 'orange', 'orange', 'strawberry'];
var r = aa.filter(function (element, index, self) {
return self.indexOf(element) === index;
});
console.log(r);
for循環(huán)
for 循環(huán)的語(yǔ)法如下:
for (語(yǔ)句 1; 語(yǔ)句 2; 語(yǔ)句 3) {
要執(zhí)行的代碼塊
}
語(yǔ)句 1 在循環(huán)(代碼塊)開始之前執(zhí)行。
語(yǔ)句 2 定義運(yùn)行循環(huán)(代碼塊)的條件忙菠。
語(yǔ)句 3 會(huì)在循環(huán)(代碼塊)每次被執(zhí)行后執(zhí)行何鸡。
for (let i=0; i<10; i++) {
要執(zhí)行的代碼塊
}
for循環(huán)類似于forEach,具體區(qū)別如下:
1牛欢、for與forEach都可以遍歷數(shù)組/集合骡男,不過(guò)for則在較復(fù)雜的循環(huán)中效率更高。
2傍睹、forEach不可以刪除/修改集合元素隔盛,而for可以
3、forEach和for都可以修改元素里面的屬性
所以相比較下來(lái)for循環(huán)更為靈活拾稳。