2017-01-04 7 views
0

valuesをオブジェクトの未定義リストとみなしてください。最適化 - 多くのargsとのlodashマージの互換性

私はこれの効果的なES5バージョンたい:...anythingが許可されていないので、私はこれ作った

var result = _.merge({}, ...values); // <-- This is what I want 

を:

var result _.reduce(response, function(result, value) { 
    return _.merge(result, value); 
}, {}); 

をしかし、私はそれをするための最良の方法ではありませんかなり確信していますdo ...

アイデア?

+1

'values'は、私が思うに、その後配列の場合'_.merge({}、values)'だけを使うことができます。代わりに、あなたの例を '_.reduce(response、_.merge、{})'に単純化することもできます。 –

+0

'_.merge({}、values)'は '{} 'の代わりに' in'の値を入れることになります。 '_.reduce(応答、_.merge、{})'は良い点です;)。しかし、それはもはや効率的ではないと私は思う。 – HollyPony

+0

各値の関数呼び出しが少なくてすみますが、それは時間がかかります:) –

答えて

1

値の配列にはFunction#applyを使用できます。あなたは、元のオブジェクトを変異させたくない場合は、Array#concat空のオブジェクトに必要があります。

_.merge.apply(_, [{}].concat(arr)); 

例:

var arr = [{ a: 1 }, { b: 2 }, { c: 3 }]; 
 

 
var result = _.merge.apply(_, [{}].concat(arr)); 
 

 
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>