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 または未定義を返す場合、要素は挿入されません。

.data()関数は型変換を行い、(明らかに) string を value に変換する必要があると想定して"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') );
});
于 2013-05-10T10:03:57.440 に答える
4

1年以上後、 map() で変更されたか、元の回答がdocsで何かを見逃していたようです。

この関数は以下を返すことができます:

  • 結果の配列にマップされる変換された値
  • null または undefined、アイテムを削除します
  • 完全な配列にフラット化される値の配列

ここでの解決策は最後の箇条書きにあります。null であっても、単一の要素を含む配列を返すだけです。配列は結果にフラット化され、null は削除されません。

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

この結果を取得します。

[ null, null, null, 1, null ]
于 2014-11-06T19:22:09.133 に答える