1. 程式人生 > 其它 >JS中map和foreach的區別以及some和every的用法

JS中map和foreach的區別以及some和every的用法

原生JS forEach()和map()遍歷

共同點:

1.都是迴圈遍歷陣列中的每一項。

2.forEach() 和 map() 裡面每一次執行匿名函式都支援3個引數:陣列中的當前項item,當前項的索引index,原始陣列input。

3.匿名函式中的this都是指Window。

4.只能遍歷陣列。

1.forEach()

沒有返回值。

arr[].forEach(function(value,index,array){

  //do something

})

引數:value陣列中的當前項, index當前項的索引, array原始陣列;
陣列中有幾項,那麼傳遞進去的匿名回撥函式就需要執行幾次;
理論上這個方法是沒有返回值的,僅僅是遍歷陣列中的每一項,不對原來陣列進行修改;但是可以自己通過陣列的索引來修改原來的陣列;

2.map()

有返回值,可以return 出來。

arr[].map(function(value,index,array){

  //do something

  return XXX

})

引數:value陣列中的當前項,index當前項的索引,array原始陣列;
區別:map的回撥函式中支援return返回值;return的是啥,相當於把陣列中的這一項變為啥(並不影響原來的陣列,只是相當於把原陣列克隆一份,把克隆的這一份的陣列中的對應項改變了);

var ary = [12,23,24,42,1];
var res = ary.map(function (item,index,input) {
    return item*10;
})
console.log(res);//-->[120,230,240,420,10];  原陣列拷貝了一份,並進行了修改
console.log(ary);//-->[12,23,24,42,1];  原陣列並未發生變化

every()與some()方法都是JS中陣列的迭代方法。

every()是對陣列中每一項執行給定函式,如果該函式對每一項返回true,則返回true。
some()是對陣列中每一項執行給定函式,如果該函式對任一項返回true,則返回true。

執行結果:

some一直在找符合條件的值,一旦找到,則不會繼續迭代下去。
every從迭代開始,一旦有一個不符合條件,則不會繼續迭代下去。