我正在尝试将这个多维数组转换为对象,但是当我运行它时,我将数组的第二部分保存到对象中,第一部分丢失了。
如何将整个数组保存在对象中?
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;
有没有更好的方法来写这个?
答案 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;
}