2016-08-19 35 views
0

lodashを使って、配列を含むオブジェクトをオブジェクトの配列に変換したい。ここでの例です:オブジェクトを配列に変換したオブジェクトlodashを変換する

オリジナルオブジェクト:形質転換後

[ 
    { 
    name:"name1" 
    params: [{param: "value1"}, {param: "value2"}] 
    }, 
    { 
    name:"name2" 
    params: [{param: "value3"}, {param: "value4"}] 
    } 
] 

[ 
    {name:"name1", param: "value1"}, 
    {name:"name1", param: "value2"}, 
    {name:"name2", param: "value3"}, 
    {name:"name2", param: "value4"} 
] 

いただきましたこれを達成するための最も簡単な方法はありますか?おかげ

[EDIT]

は、今まで私は、以下の機能を実装し、私は私の問題のために、よりエレガントな解決策が存在しなければならない、ほぼ確信しています。

transform (res) { 

      const data = []; 

      _.each(res, (obj) => { 
       const params = _.pick(obj, ['params']); 
       const withoutParams = _.omit(obj, 'params'); 
       _.each(params.params, (param) => { 
        data.push(_.assign(param, withoutParams)); 
       }); 
      }); 
      console.log('data', data); 

      return data 

     } 

答えて

0

あなたは1つの配列にすべてのオブジェクトの配列をオブジェクトの配列にparamsパラメータと、各オブジェクトの名前を_.map()、その後、_.flatMap()ことができます。

var arr = [ 
 
    { 
 
    name:"name1", 
 
    params: [{param: "value1"}, {param: "value2"}] 
 
    }, 
 
    { 
 
    name:"name2", 
 
    params: [{param: "value3"}, {param: "value4"}] 
 
    } 
 
]; 
 

 
var newArr = _.flatMap(arr, function(obj) { 
 
    return _.map(obj.params, function(param) { 
 
    return { 
 
     name: obj.name, 
 
     param: param.param 
 
    }; 
 
    }); 
 
}); 
 

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

そして、これがありますArray.prototype.map()、矢印機能、およびデストラクチャリングを使用するES6バージョン:

const arr = [ 
 
    { 
 
    name:"name1", 
 
    params: [{param: "value1"}, {param: "value2"}] 
 
    }, 
 
    { 
 
    name:"name2", 
 
    params: [{param: "value3"}, {param: "value4"}] 
 
    } 
 
]; 
 

 
const newArr = _.flatMap(arr, ({ 
 
    name, params 
 
}) => params.map(({ 
 
    param 
 
}) => ({ 
 
    name, param 
 
}))); 
 

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

関連する問題