2016-11-16 4 views
1

にネストされた配列からのデータを変換します。これまで私が行ってきたことがあります。正しい方向への指針があれば大いに感謝します。それをより読みやすくするための提案は、将来私にとっても役に立ちます。ありがとうは、私はこれをオンにしようとしているオブジェクト

function arrayToObj(arr) { 
    var newArray = []; 
    for (var i = 0; i < arr.length; i++) { 
    var obj = {}; 
    for (var j = 0; j < arr[i].length; j++) { 
     var key = arr[i][j][0]; 
     obj[key] = key; 
    } 
    newArray[i] = obj; 
    } 
    return newArray; 
} 
+0

の可能性のある重複[配列内のオブジェクトにネストされた配列のペアを変換する方法(http://stackoverflow.com/questions/40542835/how-to-convert-nested-arrayアレイへのオブジェクト間のペア) – Chetan

答えて

1

Array#mapArray#reduceメソッドを使用できます。 FYI

var pets = [ 
 
    [ 
 
    ['dog', 'Harry'], 
 
    ['age', 2] 
 
    ], 
 
    [ 
 
    ['dog', 'Roger'], 
 
    ['age', 5] 
 
    ] 
 
]; 
 

 

 
var dogs = pets.map(function(v) { // iterate over the array 
 
    return v.reduce(function(obj, arr) { // iterate over inner array to generate object 
 
    obj[arr[0]] = arr[1]; // define object property based on inner array element 
 
    return obj; // return updated object 
 
    }, {}); // set initial value as an empty object 
 
}) 
 

 
console.log(dogs);


あなたがあなた自身のコードに固執したいなら、あなたはobj[key] = arr[i][j][1];とラインobj[key] = key;を更新する必要があるか、まったくkey変数の必要はありません単純なコードの行をobj[arr[i][j][0]] = arr[i][j][1];として使用します。

var pets = [ 
 
    [ 
 
    ['dog', 'Harry'], 
 
    ['age', 2] 
 
    ], 
 
    [ 
 
    ['dog', 'Roger'], 
 
    ['age', 5] 
 
    ] 
 
]; 
 

 
function arrayToObj(arr) { 
 
    var newArray = []; 
 
    for (var i = 0; i < arr.length; i++) { 
 
    var obj = {}; 
 
    for (var j = 0; j < arr[i].length; j++) { 
 
     obj[arr[i][j][0]] = arr[i][j][1]; 
 
     // updated here ------^^^^^^^---- 
 
    } 
 
    newArray[i] = obj; 
 
    } 
 
    return newArray; 
 
} 
 

 
var dogs = arrayToObj(pets); 
 

 
console.log(dogs);

1

これはMapコンストラクタはあなたのために自動的に行うことができるものです。

var dogs = pets.map(pairs => new Map(pairs)) 
1
function arrayToObj(arr) { 
    return arr.map((item) => { 
    var object = {}; 
    item.forEach((data) => { 
     object[data[0]] = data[1]; 
    }) 
    return object 
    }) 
} 
0

var pets = [ 
 
    [ 
 
     ['dog', 'Harry'], ['age', 2] 
 
    ], 
 
    [ 
 
     ['dog', 'Roger'], ['age', 5] 
 
    ] 
 
] 
 

 

 

 
var petArr = pets.reduce(function(a, b) { 
 
    var obj = {} 
 
    b.forEach(function(set){ 
 
    obj[set[0]] = set[1] 
 
    }) 
 
    return a.concat(obj) 
 
}, []) 
 

 
console.log(petArr)

0

変更obj[key] = arr[i][j][1];の代わりobj[key] = key

私はマップと他のアレイ方式で行われている可能性が、私はあなたが間違っていた場所を示したいと思います。

var pets = [ 
 
     [ 
 
      ['dog', 'Harry'], ['age', 2] 
 
     ], 
 
     [ 
 
      ['dog', 'Roger'], ['age', 5] 
 
     ] 
 
    ]; 
 
var a=function arrayToObj(arr) { 
 
    var newArray = []; 
 
    for (var i = 0; i < arr.length; i++) { 
 
    var obj = {}; 
 
    for (var j = 0; j < arr[i].length; j++) { 
 
     var key = arr[i][j][0]; 
 
     obj[key] = arr[i][j][1]; // change here instead of key 
 
    } 
 
    newArray[i] = obj; 
 
    } 
 
    return newArray; 
 
} 
 
console.log(a(pets));

0

私は次のスクリプトはあなたを助けることを願っています。

function arrayToObj(arr) { 
     var newArray = []; 
     for (var i = 0; i < arr.length; i++) { 
      var obj = { 
       dog: '', 
       age: '' 
      }; 

      obj.dog = arr[i][0][1]; 
      obj.age = arr[i][1][1]; 
      newArray.push(obj); 
     } 
     return newArray; 
    } 
0

あなたが望む結果を得るためにforEach()ループ内にネストされたシンプルなfor()ループを使用することができます。 QUICK-TEST HERE

var pets = [ 
 
    [ 
 
    ['dog', 'Harry'], 
 
    ['age', 2] 
 
    ], 
 
    [ 
 
    ['dog', 'Roger'], 
 
    ['age', 5] 
 
    ] 
 
]; 
 

 
function arrayToObject(arrData) { 
 
    var objData = []; 
 
    arrData.forEach(function(data, index) { 
 
    var tmpObject = {}; 
 
    for (var i = 0; i < data.length; i++) { 
 
     var arr = data[i]; 
 
     tmpObject[arr[0]] = arr[1]; 
 
    } 
 
    objData.push(tmpObject); 
 
    }); 
 
    return objData; 
 
} 
 

 
console.log(arrayToObject(pets));

// YIELDS:: 
     Array[2] 
      0: Object 
       age: 2 
       dog: "Harry" 
      1: Object 
       age: 5 
       dog: "Roger" 

</script> 
0

あなたはゼロに、アレイのプロパティとして設定配列長の値を割り当て、普通のオブジェクトに配列型を変換し、それを割り当てることができ同じ要素。

var pets = [[['dog', 'Harry'], ['age', 2]], [['dog', 'Roger'], ['age', 5]]]; 
 

 
pets.forEach(function (a, i, aa) { 
 
    a.forEach(function (b, _, bb) { 
 
     bb[b[0]] = b[1]; 
 
    }); 
 
    a.length = 0; 
 
    aa[i] = Object.assign({}, aa[i]); 
 
}); 
 

 
console.log(pets);

関連する問題