2016-08-19 5 views
0

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"} 
] 

가장 쉬운 방법은 무엇이 이것을 달성하는 다음 예를? 감사합니다

[편집]

은 지금까지 나는 아래의 기능을 구현,하지만 난 내 문제에 대한 더 우아한 해결책이 있어야한다 거의 확신한다.

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
당신은 객체의 배열로 각 개체의 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>

관련 문제