多维数组到对象

时间:2017-01-05 04:10:39

标签: javascript arrays object multidimensional-array

我正在尝试将这个多维数组转换为对象,但是当我运行它时,我将数组的第二部分保存到对象中,第一部分丢失了。

如何将整个数组保存在对象中?



var array = [
  [
    ['name', 'John Smith'],
    ['age', 34],
    ['occupation', 'nurse']
  ],
  [
    ['name', 'Nico Klein'],
    ['age', 24],
    ['occupation', 'engineer']
  ]
];

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

var result = toObject(array);

console.log(result);
&#13;
&#13;
&#13;

有没有更好的方法来写这个?

2 个答案:

答案 0 :(得分:2)

你做得很好,但是父对象应该是对象数组,这是有道理的。

var array = [
  [
    ['name', 'John Smith'],
    ['age', 34],
    ['occupation', 'nurse']
  ],
  [
    ['name', 'Nico Klein'],
    ['age', 24],
    ['occupation', 'engineer']
  ]
];

function toObject(arr) {
  var obj = [];
  for (var j = 0; j < arr.length; j++) {
    var cur = {};
    for (var i = 0; i < arr[j].length; i++) {
      cur[arr[j][i][0]] = arr[j][i][1];
    }
    obj.push(cur);
  }
  return obj;
}

var result = toObject(array);
console.log(result);

输出将按以下顺序排列:

[
  {
    "name": "John Smith",
    "age": 34,
    "occupation": "nurse"
  },
  {
    "name": "Nico Klein",
    "age": 24,
    "occupation": "engineer"
  }
]

它拥有原始数组中的所有记录。如果您仍想将结果数组转换为对象,请查看Convert Array to Object

var array = [
  [
    ['name', 'John Smith'],
    ['age', 34],
    ['occupation', 'nurse']
  ],
  [
    ['name', 'Nico Klein'],
    ['age', 24],
    ['occupation', 'engineer']
  ]
];

function toObject(arr) {
  var obj = [];
  for (var j = 0; j < arr.length; j++) {
    var cur = {};
    for (var i = 0; i < arr[j].length; i++) {
      cur[arr[j][i][0]] = arr[j][i][1];
    }
    obj.push(cur);
  }
  return obj;
}

var result = toObject(array);
var resObj = result.reduce(function(acc, cur, i) {
  acc[i] = cur;
  return acc;
}, {});
console.log(resObj);

最终的Object输出将为您提供:

{
  "0": {
    "name": "John Smith",
    "age": 34,
    "occupation": "nurse"
  },
  "1": {
    "name": "Nico Klein",
    "age": 24,
    "occupation": "engineer"
  }
}

答案 1 :(得分:0)

首先,您应该尝试将该数组转换为“对象数组”,这是有道理的,因为数组中有两个元素。所以你应该尝试获取对象数组。

其次这个程序是正确的,但是有一个错误。看看你的代码吧 创建了一个var obj = {};这是一个对象,你要分配它应该是对象数组的数组值,所以改变函数如下

function toObject(arr) {
  var arrOfObj = [];
  for (var j = 0; j < arr.length; j++) {
    var curObj = {};
    for (var i = 0; i < arr[j].length; i++) {
      curObj[arr[j][i][0]] = arr[j][i][1];
    }
    arrOfObj.push(cur);
  }
  return arrOfObj;
}