5

私は次のオブジェクトを持っています

{one : 1, two : 2, three : 3}

そして私は欲しい

[1,2]

ここに私のコード

_.map({one : 1, two : 2, three : 3}, function(num, key){ 
         if (key==='one' || key==='two') {
             return num;
         } 
}); // [1, 2, undefined]

実はお願いします[1,2]

コードを改善するにはどうすればよいですか?
ありがとう

4

6 に答える 6

9

あなたは実際に使いたい_.pick_.values

_.values( _.pick( obj, "one", "two" ) )
于 2012-05-24T07:42:14.573 に答える
3

そのための組み込みの可能性はないと思います(たとえば、flatMapではその目的に使用できます)。では、連鎖mapfilter:を検討してください。

_({one : 1, two : 2, three : 3}).
  chain().
  map(function(num, key){ 
    if (key==='one' || key==='two') {
      return num;
    }
  }).
  filter(function(num) {
    return num !== undefined
  }).
  value();

UPDATE(@ZacharyKコメントごと):または:をreject補完するものを使用しfilterます

reject(function(num) {
  return num === undefined
})
于 2012-05-24T07:38:29.283 に答える
2

これを2つのステップで行う別のオプション、最初mapcompact

例:

myArray = _.map({one : 1, two : 2, three : 3}, function(num, key){ 
         if (key==='one' || key==='two') {
             return num;
         } 
    });

myArray = _.compact(myArray)

このソリューションは、オブジェクトよりも配列に適しています。

_.compact(array):

すべての偽の値が削除された配列のコピーを返します。JavaScriptでは、false、null、0、 ""、undefined、およびNaNはすべて偽物です。

于 2012-11-03T22:38:31.877 に答える
2

他の答えは、オブジェクトの長さを通る(少なくとも)2つのループを含みます。あなたが本当に欲しいのは_.reduce

_.reduce({ one : 1, two : 2, three : 3 }, function ( out, num, key ) { 
    if ( key === 'one' || key === 'two' ) {
        out.push( num );
    }
    return out;
}, []);
// [1, 2]

これにより、オブジェクトを1回ループするだけで、好きなように圧縮された答えが得られます。

于 2015-01-13T22:31:34.027 に答える
0

それを2つのステップに分けます。最初にフィルターを使用して必要な値を選択し、次にマップを使用して値を取得します

_({..}).chain()
       .filter(function(num, key){
            return key ==='one'||key==='two';
        })
       map(function (num,key){
            return num;
       }).values()
于 2012-05-24T07:39:22.247 に答える
-1

使ってみませんか:

_.map(['one','two'], function(key) { return obj[key]; });

これはに評価されます[1, 2]

を参照してください(ただし、ノードreplのため、アンダースコアをエイリアスする必要があります__):

> var __ = require('underscore');
> var obj = {one : 1, two : 2, three : 3};
> __.map(['one','two'], function(key) { return obj[key]; });
[ 1, 2 ]
于 2012-05-24T07:39:59.440 に答える