0

ねえ、私はunderscore.jsが初めてで、マップ上で操作を実行する方法を理解しようとしています. API を読みましたが、何かが足りないのではないかと心配しています。

これが私がやりたいことです:

doubled = _.someFunction( { bob: 25, sally: 30, tom: 5 }
                          , function(value){ return value*2; } 
                        );

戻る:

{ bob: 50, sally: 60, tom: 10 }

これを行う方法はありますか?で新しい関数を作成する必要があります_.mixin()か?

4

3 に答える 3

2

次のような double 関数を作成できます。

function double(data) {

  var doubled = {};

  _.each(data, function(value, key) {
    doubled[key] = 2 * value;
  });

  return doubled;

};

double({ bob: 25, sally: 30, tom: 5 });
于 2013-05-01T17:43:28.587 に答える
1

mapいいえ、アンダースコアは実際にはオブジェクトの機能を提供していません。(_.mapオブジェクトで使用できますが、配列が返されます)

したがって、手動で行う必要があります。

_.someFunction = function(o, f) {
    var res = {};
    for (var p in o)
        res[p] = f(o[p]);
    return res;
};

もちろん、アンダースコアからいくつかの反復関数を使用することもできます。ヘルパー関数がなければ、これらのスニペットは多かれ少なかれ表現力があるかもしれません:

var doubled = {};
_.each({ bob: 25, sally: 30, tom: 5 }, function(p, value){
    doubled[p] = value*2;
});
var doubled = _.reduce({ bob: 25, sally: 30, tom: 5 }, function(m, value, p){
    m[p] = value*2;
    return m;
}, {});
var obj = { bob: 25, sally: 30, tom: 5 };
var doubled = _.object(
  _.keys(obj),
  _.map(_.values(obj), function(value){ return value*2; })
);
于 2013-05-01T18:46:19.663 に答える