2013-11-14 25 views
5

したがって、アンダースコアの_.map()関数はオブジェクトを返しませんが、それを受け取ります。それと同じオブジェクトを返す方法はありますか?_map()からオブジェクトを返します

var _ = require("underscore"); 

var cars = { 
    "mom": { 
     "miles": "6", 
     "gas": "4" 
    }, 
    "dad": { 
     "miles": "6", 
     "gas": "4" 
    } 
} 

var regurgitate_cars = _.map(cars, function(value, key){ 
    return value; 
}); 

/* 
[ { miles: '6', gas: '4' }, { miles: '6', gas: '4' } ] 
*/ 

var regurgitate_cars = _.map(cars, function(value, key){ 
    var transfer = {}; 
    transfer[key] = value; 
    return transfer; 
}); 

/* 
[ { mom: { miles: '6', gas: '4' } }, 
    { dad: { miles: '6', gas: '4' } } ] 
*/ 
+0

何を達成しようとしていますか?オブジェクトを浅く/深くコピーするか? –

+1

アンダースコアの値を参照してくださいhttps://github.com/jashkenas/underscore/issues/220 – megawac

答えて

6

_.object()を使用すると、オブジェクトに戻すことができます。

var regurgitate_cars = _.object(
    _.map(cars, function(value, key){ 
     return [key, value]; 
    }) 
); 

_.mapと直接それを行うためとして、あなたはそれを行うためのマップを書き換える必要があるだろう。

+2

これを行うには、[key、value]を返す必要がありますか? – McGarnagle

+0

@McGarnagle、よろしくお願いします。あなたは正しいです。投稿が更新されました。そしてそれははるかに簡潔に見えます。 – EmptyArsenal

1

mapので、あなたはそれが出て、自分を書いて、元のオブジェクトを返すように得ることができる方法はありませんarrayを返します。 documentation参照:

は 変換関数(イテレータ)を介して、リスト内の各値をマッピングすることによって、新しい値のアレイを生成します。ネイティブ・マップ方式が存在する場合は、代わりに が使用されます。 listがJavaScriptオブジェクトの場合、イテレータの 引数は(value、key、list)になります。

0

マップの現在の実装でオブジェクトを返す方法はありません。 It's been suggestedライブラリには、好きなように機能する.mapValues()機能が追加されています。ここでは、あなたのコードにそれを追加する方法は次のとおりです。

_.mixin({ 
    mapValues: function (input, mapper) { 
     return _.reduce(input, function (obj, v, k) { 
      obj[k] = mapper(v, k, input); 
     }, {}); 
    } 
}); 

今、あなたは、新しいオブジェクトを返すためにmapValuesを使用することができます。

var regurgitate_cars = _.mapValues(cars, function(value, key){ 
    return value; 
}); 
5

_.map()を常に配列を返しますが、_.reduce()で動作を得ることができます:あなたがbのだろう第三引数として空のオブジェクトを提供することができますコピーを望んでいたならば、これは、元のオブジェクトを変更して返すこと

var regurgitateCars = _.reduce(cars, function(memo, value, key) { 
    memo[key] = value; 
    return memo; 
}, cars); 

注意匿名関数の最初の呼び出しでmemo引数として使用されます。

var regurgitateCars = _.reduce(cars, function(memo, value, key) { 
    memo[key] = value; 
    return memo; 
}, {}); 
関連する問題