2013-11-21 21 views
2

map功能看上去比for循環好得多:調用一個函數而不指定其結果給一個變量

var arr = ["Apple", "Orange"]; 
// map example 
arr.map(function(item){ eat(item); }); 
// for example 
for(var i=0; i<arr.length; i++){ 
    eat(arr[i]); 
} 

我寧願map超過for但:

  1. 的函數,其中map成爲一個參數應該有一個返回值被減少到一個數組,其中map應該返回。將viod函數傳遞給map有什麼影響,就像我的例子一樣?
  2. map返回一個數組。如果我不將它分配給一個變量,會發生什麼,就像我的例子中那樣?
  3. 有沒有像map這樣的虛空功能?
+1

什麼在標題發生了什麼? 「assuaging」:) :) – tymeJV

+0

3. ['Array.prototype.forEach'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach) – cHao

回答

2

一個函數,映射變成一個參數應該有一個返回值被縮小到一個映射應該返回的數組。將viod函數傳遞給地圖有什麼影響,就像我的例子一樣?

沒有返回語句的函數返回的值是undefined。因此,如果你傳遞一個永不返回任何東西的函數來映射它,它將創建一個長度等於原始數組的新數組,每個值都是undefined

map返回一個數組。如果我不將它分配給一個變量,會發生什麼,就像我的例子中那樣?

數組仍然被創建,但在創建後立即丟棄,並立即收集垃圾。這種行爲可能會被JS引擎優化掉!

有沒有像map這樣的void函數?

正如其他人指出的那樣,是Array.prototype.forEach功能陣列上迭代(類似映射),但不創建一個新的陣列或使用以任何方式與之相關的回調的結果。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach

1

您正在尋找.forEach()

您可能會發現,瀏覽MDN documentation是積累此類信息的一種比提問更好的方式。現在至少我希望這個答案能減輕你的痛苦。

編輯 —至於問題1,它不會傷害任何東西。 .map()函數將構建一個滿足undefined條目的數組。 (我想。)

對於2,這也是確定的。至少就運行時而言,忽略函數的返回值永遠不是問題。

+0

Nice answer 3.點。但是我找不到1和2的任何信息。 – speechkey

+0

@speechkey好的我想我明白你在問什麼;我會添加到我的答案。 – Pointy

0

你在找什麼是forEach method

var arr = ["Apple", "Orange"]; 
arr.forEach(eat); 
1

1.一種函數,該函數地圖成爲作爲參數應該有一個返回值是減少了排列的地圖應返回。將viod函數傳遞給地圖有什麼影響,就像我的例子一樣?

var numbers = [1, 4, 9]; 
var mapped = numbers.map(function(){ 
    //do nothing 
}); 
console.log(numbers);//[1, 4, 9] 
console.log(mapped);//[undefined, undefined, undefined] 

初始陣列將繼續擔任同樣的,你會得到一個數組未定義陣列

2。地圖返回一個數組。如果我不將它分配給一個變量會發生什麼,就像我的 示例中那樣?

沒有什麼會發生,你鬆了改變後的數組。

3.是否有像map這樣的void函數?

所有陣列的方法不列入修改的參考陣列, EG

Array.concat(value1[value2[value...]]) 
Array.every(function) 
Array.filter(function) 
Array.forEach(function) 
Array.join(delimeter) 
Array.indexOf(searchStr[, startIndex]) 
Array.lastIndexOf(searchStr[, startIndex]) 
Array.map(function) .... etc 

Array.splice(), push, pop, shift, unshift,.. etc將改變

+0

'Array.prototype.slice'不會更改數組。唯一改變數組的方法是'splice','push','pop','shift','unshift'。 – Tibos

+0

是..已編輯的答案 – Sarath

相關問題