2013-05-10 69 views
2

爲什麼null未添加到我的keys數組之下?將空值映射到數組

HTML

<input type="radio" data-codekey="1"/> 
<input type="radio" data-codekey="null"/> 

JS

$(function(){ 

    var keys = $step.find('input[type="radio"]').map(function (i, el) { 

     return $(el).data('codekey'); 

    }).get(); 

console.log(keys); // [1] 
//desired result: [1, null] 

}); 

http://jsfiddle.net/Mewem/

回答

9

the .map() documentation

如果該函數返回null或undefined,則不會插入任何元素。

.data()函數執行類型轉換和(顯然)假設字符串"null"應轉換爲值null。它還將字符串"1"轉換爲數字1

使用.attr()代替.data(),你會得到實際的字符串"null":如果你想要一個實際null不能使用.map()

return $(el).attr('data-codekey'); 

,你必須有.each()循環重寫一遍什麼:

var keys = []; 
$step.find('input[type="radio"]').each(function() { 
    keys.push($(this).data('codekey')); 
}); 
+0

是的,我就手動推動他們的結果數組:

$([ null, null, null, 1, null]).map(function (i, el) { return [ el ]; }).get(); 

獲取此結果()'。謝謝 – Johan 2013-05-10 10:09:53

+1

對於使用ES6 Array.map的用戶來說,它的功能與這個答案不一樣。返回falsey將添加到數組中。 – LessQuesar 2016-03-10 19:48:24

+1

@LessQuesar - 是的,這是關於jQuery的$ .map() - 它保留了其他falsey值,只是不爲null或未定義。自從編寫這個答案(幾年前)以來,我發現使用返回'[null]'的jQuery函數(即返回一個具有null作爲元素的數組)將把'null'放入新數組中。或者使用.call()或.apply()將本地.map()與jQuery對象一起使用。 – nnnnnn 2016-03-10 21:19:01

1

過了一年之後,似乎要麼東西都與地圖改變()或原來的答案錯過了docs

該函數可以返回:

  • 翻譯值,其將被映射到所得到的陣列
  • null或未定義,刪除的項
  • 值的陣列,這將被展平到全陣列

溶液這裏是最近子彈:只需返回一個包含單個元素的數組,即使它是null。陣列都將展開到的結果,並且空值將不會被刪除:使用`每個

[ null, null, null, 1, null ] 
+0

當您參考文檔時,您應該參考正確的地圖方法:http://api.jquery.com/map/ – Johan 2014-11-06 20:04:08