2017-04-11 8 views
-1

私はサーバーの応答から来ているオブジェクトの配列を持っています。オブジェクトキーを反復してキー値を操作します

アレイ構造:

[ 
    { 
    col1: ["a", "b"], 
    col2: ["c", "d"] 
    }, 

    { 
    col1: ["e", "f"], 
    col2: ["g", "h"] 
    } 
] 

Iは、所望の出力アレイがこの形態であることたい:

[ 
    { 
    col1: "b", 
    col2: "d" 
    }, 

    { 
    col1: "f", 
    col2: "h" 
    } 
] 

基本的に、私は最初に単一のアレイであるオブジェクトキー値を変換しますその値はObject keys配列の2番目の要素になります。

オブジェクトキー配列をカンマ区切り文字列に変換してtoString()を使用して変換を実行できますが、次に​​を実行しますが、オブジェクトキーを反復処理できません。

反復

+1

これは、単純なループを使用して達成することができ、あなたは何をしようとしたことがありますか? – Satpal

+1

[JavaScriptオブジェクトをループスルーまたは列挙する方法は?](http://stackoverflow.com/questions/684672/how-do-i-loop-through-or-enumerate-a-javascript-object) – Arg0n

+0

map for loopingを使ってes6を使用しています。私はダブルマップを試みましたが、オプティマイズされた方法で繰り返しませんでした。 –

答えて

0

あなたは希望のキー/値を持つ新しいオブジェクトの内部マッピングにArray#mapObject.assignspread syntax ...の組み合わせを使用することができます。

var data = [{ col1: ["a", "b"], col2: ["c", "d"] }, { col1: ["e", "f"], col2: ["g", "h"] }], 
 
    result = data.map(o => Object.assign({}, ...Object.keys(o).map(k => ({ [k]: o[k][1] })))); 
 

 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

0

次のコードは、あなたの仕様に従って動作するはずのためにマップを使用してES6で入力を好むだろう。 Array#reduceObject.keysを使用して

var arr = [ {col1: ["a","b"], col2: ["c","d"] }, {col1: ["e","f"], col2: ["g","h"] } ] 
 

 

 
// [ {col1: "b" , col2: "d" }, {col1: "f", col2: "h" } ] 
 

 
arr2 = []; 
 

 
arr.forEach(e => { 
 
    let currObj = {}; 
 
    Object.keys(e).forEach(f => { 
 
    currObj[f] = e[f][1] 
 
    }) 
 
    arr2.push(currObj) 
 
}) 
 

 
console.log(arr2);

+0

キーの名前は可変であり、サーバーの応答からくるので固定されていません。 –

+1

私のコードが更新されました。今すぐ動作します。 –

+0

素晴らしいです。がんばり続ける ! –

0

解決策。

var arr = [ {col1: ["a","b"], col2: ["c","d"] }, {col1: ["e","f"], col2: ["g","h"] } ], 
 
    res = arr.reduce(function(s,a) { 
 
     var obj = {}; 
 
     Object.keys(a).map(function(c) { 
 
     obj[c] = a[c][1]; 
 
     }) 
 
     s.push(obj); 
 
     return s; 
 
    }, []); 
 
    
 
    console.log(res);

+0

ありがとうございます。これは私が探していたものです。魅力のように動作します。 –

0

var data = [ {col1: ["a","b"], col2: ["c","d"] }, {col1: ["e","f"], col2: ["g","h"] } ]; 
 
var res=[]; 
 
var d = data.reduce(function(all,item){ 
 
    res.push({col1:item.col1[1],col2:item.col2[1]}); 
 
    return all; 
 
},{}); 
 

 
console.log(res);

関連する問題