javascript 将空值映射到数组

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/16479744/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-27 04:51:57  来源:igfitidea点击:

Map null values to array

javascriptjquery

提问by Johan

Why isn't nulladded to my keysarray below?

为什么没有null添加到我keys下面的数组中?

HTML

HTML

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

JS

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/

http://jsfiddle.net/Mewem/

回答by nnnnnn

From the .map()documentation:

.map()文档

If the function returns null or undefined, no element will be inserted.

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

The .data()function does type conversion and (apparently) assumes the string "null"should be converted to the value null. It also converts the string"1"to the number 1.

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

Use .attr()instead of .data()and you'll get the actual string "null":

使用.attr()而不是.data()你会得到实际的字符串"null"

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

If you want an actual nullyou can't use .map(), you'd have to rewrite it with an .each()loop or something:

如果你想要一个null你不能使用的实际.map(),你必须用.each()循环或其他东西重写它:

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

回答by Lee

Over a year later, it appears that either things have changed with map() or the original answer missed something in the docs.

一年多后,似乎 map() 发生了变化,或者原始答案遗漏了docs 中的某些内容。

The function can return:

  • the translated value, which will be mapped to the resulting array
  • null or undefined, to remove the item
  • an array of values, which will be flattened into the full array

该函数可以返回:

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

The solution here is in the last bullet: simply return an array containing a single element, even if it's null. The arrays will be flattened into the results, and the nulls will not be removed:

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

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

Gets this result:

得到这个结果:

[ null, null, null, 1, null ]

回答by PSR

Null values are not inserted into that

不插入空值

SEE HERE

看这里

回答by gdoron is supporting Monica

If the function returns null or undefined, no element will be inserted.

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

Docs

文档

You can cast to string like:

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

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

Read this: Casting to string in JavaScript

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

回答by Joel Christophel

You can simply move the .get()call before .map(). This will have you using the more predictable Array.map()function, which allows null:

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

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