将空值映射到数组

时间:2013-05-10 10:02:09

标签: javascript jquery

为什么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/

5 个答案:

答案 0 :(得分:9)

来自the .map() documentation

  

如果函数返回null或undefined,则不会插入任何元素。

.data()函数进行类型转换,并且(显然)假定字符串"null"应转换为值null。它还会将字符串"1"转换为数字1

使用.attr()代替.data(),您将获得实际的字符串"null"

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

如果您想要实际的null,则无法使用.map(),则必须使用.each()循环或其他内容重写它:

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

答案 1 :(得分:2)

一年之后,似乎有任何事情已经改变了map()或原始答案错过了docs中的内容。

  

该功能可以返回:

     
      
  • 已翻译的值,将映射到结果数组
  •   
  • null或undefined,删除项目
  •   
  • 一个值数组,将被展平为完整数组
  •   

这里的解决方案是在最后一个子弹中:简单地返回一个包含单个元素的数组,即使它是null。数组将被展平为结果,并且不会删除空值:

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

获取此结果:

[ null, null, null, 1, null ]

答案 2 :(得分:1)

空值未插入

SEE HERE

答案 3 :(得分:1)

  

如果函数返回null或undefined,则不会插入任何元素。

Docs

您可以转换为字符串,如:

$(el).data('codekey') + "";

阅读本文:Casting to string in JavaScript

答案 4 :(得分:0)

您只需将.get()呼叫移到.map()之前。这将使您使用更可预测的Array.map()函数,该函数允许null

var keys = $step.find('input[type="radio"]').get().map(function (el) {
    return $(el).data('codekey');
});