将空值映射到数组
问题描述:
为什么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]
});
答
如果该函数返回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'));
});
答
如果函数返回null或undefined,则不会插入任何元素。
可以转换为像字符串:
$(el).data('codekey') + "";
是的,我就手动推动他们的结果数组:
获取此结果()'。谢谢 – Johan 2013-05-10 10:09:53
对于使用ES6 Array.map的用户来说,它的功能与这个答案不一样。返回falsey将添加到数组中。 – LessQuesar 2016-03-10 19:48:24
@LessQuesar - 是的,这是关于jQuery的$ .map() - 它保留了其他falsey值,只是不为null或未定义。自从编写这个答案(几年前)以来,我发现使用返回'[null]'的jQuery函数(即返回一个具有null作为元素的数组)将把'null'放入新数组中。或者使用.call()或.apply()将本地.map()与jQuery对象一起使用。 – nnnnnn 2016-03-10 21:19:01