3

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

4

5 回答 5

10

文档.map()

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

.data()函数进行类型转换,并且(显然)假定字符串"null"应转换为 value 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') );
});
于 2013-05-10T10:03:57.440 回答
4

一年多之后,似乎事情已经改变了 map() 或者原始答案在docs中遗漏了一些东西。

该函数可以返回:

  • 翻译后的值,将映射到结果数组
  • null 或未定义,删除项目
  • 一组值,将被展平为完整的数组

这里的解决方案在最后一个项目符号中:只需返回一个包含单个元素的数组,即使它为空。数组将被展平为结果,并且不会删除空值:

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

得到这个结果:

[ null, null, null, 1, null ]
于 2014-11-06T19:22:09.133 回答
1

空值不会插入其中

看这里

于 2013-05-10T10:04:21.743 回答
1

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

文档

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

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

阅读本文:在 JavaScript 中转换为字符串

于 2013-05-10T10:04:42.930 回答
0

您可以简单地将.get()呼叫移到.map(). 这将使您使用更可预测的Array.map()函数,该函数允许null

var keys = $step.find('input[type="radio"]').get().map(function (el) {
    return $(el).data('codekey');
});
于 2020-05-14T21:38:04.570 回答