在javascript中转换对象数组

时间:2017-10-01 13:28:11

标签: javascript

我是JS的新手,我希望你帮助我)我需要以这种方式转换对象数组:

const arr = [
  {id: 'key1', value: 1 },
  {id: 'key2', value: [1,2,3,4]}
 ...
]
const transformedArr = [
   {key1: 1},
   {key2: 1},
   {key2: 2},
   {key2: 3},
   {key2: 4},
   ....
 ]

我该怎么做?

3 个答案:

答案 0 :(得分:3)

因为你是JS的新手..

带有for循环的Good Old JS可能很容易理解

const arr = [
  {id: 'key1', value: 1 },
  {id: 'key2', value: [1,2,3,4]}
]

const transformedArr  =[]


for(var i = 0 ; i < (arr.length); i++){

   var valArr = arr[i].value

   if( Array.isArray(valArr) ){ // to check if the value part is an array

      for(var j=0 ; j < valArr.length ; j++){

        transformedArr.push({id: arr[i].id,value:valArr[j] })

      }

   }else{

     transformedArr.push({id: arr[i].id,value:valArr })

   }

}

console.log(transformedArr)

答案 1 :(得分:0)

您可以使用ES6传播语法...map()方法。

const arr = [
  {id: 'key1', value: 1 },
  {id: 'key2', value: [1,2,3,4]}
]

var result = [].concat(...arr.map(({id, value}) => {
  return Array.isArray(value) ? value.map(e => ({[id]: e})) : {[id]: value}
}))

console.log(result)

您也可以使用reduce()代替map()方法。

const arr = [
  {id: 'key1', value: 1 },
  {id: 'key2', value: [1,2,3,4]}
]

var result = arr.reduce(function(r, {id, value}) {
  r = r.concat(Array.isArray(value) ? value.map(e => ({[id]: e})) : {[id]: value})
  return r;
}, [])

console.log(result)

答案 2 :(得分:0)

此提案以Array.concat为特色,因为它将没有数组和数组的项添加到数组中。

const
    array = [{ id: 'key1', value: 1 }, { id: 'key2', value: [1, 2, 3, 4] }],
    result = array.reduce(
        (r, a) => r.concat(
            [].concat(a.value).map(
                v => ({ [a.id]: v })
            )
        ),
        []
    );
      
console.log(result);