为什么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]
});
答案 0 :(得分:9)
如果函数返回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)
空值未插入
答案 3 :(得分:1)
如果函数返回null或undefined,则不会插入任何元素。
您可以转换为字符串,如:
$(el).data('codekey') + "";
答案 4 :(得分:0)
您只需将.get()
呼叫移到.map()
之前。这将使您使用更可预测的Array.map()函数,该函数允许null
:
var keys = $step.find('input[type="radio"]').get().map(function (el) {
return $(el).data('codekey');
});