簡體   English   中英

將數據從嵌套數組轉換為對象

[英]Transform data from an nested array to an object

我試圖改變這個:

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

進入這個:

var dogs = [
    {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++) {
      var key = arr[i][j][0];
      obj[key] = key;
    }
    newArray[i] = obj;
  }
  return newArray; 
}

您可以使用Array#mapArray#reduce方法。

 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] = key; obj[key] = arr[i][j][1]; 或者根本不需要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); 

這是Map構造函數可以自動執行的操作:

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

  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) 

改變obj[key] = arr[i][j][1]; 而不是obj[key] = key

我可以用map和其他數組方法完成,但我想表明你錯了。

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

我希望以下腳本可以幫到你。

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

你可以使用一個簡單的for()循環嵌套在forEach()循環中來獲得你想要的結果。 在這里快速測試

 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>

您可以將值作為屬性分配給數組,將數組長度設置為零,並將數組類型轉換為普通對象,並將其分配給同一元素。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM