2017-10-01 2 views
1

イム新しいのオブジェクトの配列を変換し、私は、このようにオブジェクトの配列を変換する必要があります)あなたは私を助け願っています:はJSでJavaScriptで

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}, 
    .... 
] 

は、私はそれをどのように行うことができますか?

答えて

0

map()の方法では、...のES6拡散構文を使用できます。あなたはまた、map()メソッドの代わりにreduce()を使用することができます

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)

。あなたが理解するためにforループと

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)

3

あなたはJSに新しいしているので ...

古き良きJSは簡単かもしれない

この提案は Array.concatます
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) 
0

、これは、配列と配列のない項目を配列に追加するためです。

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);

関連する問題