我在将类似数组的对象数组转换为对象数组时遇到了一些麻烦。我正在使用reduce方法,它正确地将数组数据转换为第一组数组的对象,但第二次通过,它正确地将数据设置为键:值对但不将它放在我对象中希望它进入。
这是数组和函数:
var array = [
[
['Name', 'Arusha'], ['Species', 'Arabica'], ['Region', 'Mount Meru in Tanzania, and Papua New Guinea'], ['Comments', 'Typica variety or a French Mission']
],
[
['Name', 'Catimor'], ['Species', 'Interspecific hybrid'], ['Region', 'Latin America'], ['Comments', 'This is cross between Timor coffee and Caturra coffee. It was created in Portugal in 1959']
]
];
function convertArrayToObject(array) {
var arr = [];
array.reduce(function(result, currentArray) {
for (var j = 0, i = 0; i < array[0].length; i++) {
result[currentArray[i][0]] = currentArray[i][1];
}
arr.push(result);
return arr;
}, {});
return arr;
}
我的预期输出假设看起来像这样:
[
{ Name: 'Arusha', Species: 'Arabica', Region: 'Mount Meru in Tanzania, and Papua New Guinea', Comments: 'Typica variety or a French Mission' },
{ Name: 'Catimor', Species: 'Interspecific hybrid', Region: 'Latin America', Comments: 'This is cross between Timor coffee and Caturra coffee. It was created in Portugal in 1959' }
]
这就是我目前正在回归的内容:
[ { Name: 'Arusha', Species: 'Arabica', Region: 'Mount Meru in Tanzania, and Papua New Guinea', Comments: 'Typica variety or a French Mission' },
[Circular],
Name: 'Catimor',
Species: 'Interspecific hybrid',
Region: 'Latin America',
Comments: 'This is cross between Timor coffee and Caturra coffee. It was created in Portugal in 1959' ]
非常感谢任何帮助!
答案 0 :(得分:4)
您可以使用Array#map
并为外部数组的每个元素返回一个新对象。在里面,您可以迭代所有项目并构建新属性。
var array = [[['Name', 'Arusha'], ['Species', 'Arabica'], ['Region', 'Mount Meru in Tanzania, and Papua New Guinea'], ['Comments', 'Typica variety or a French Mission']], [['Name', 'Catimor'], ['Species', 'Interspecific hybrid'], ['Region', 'Latin America'], ['Comments', 'This is cross between Timor coffee and Caturra coffee. It was created in Portugal in 1959']]],
result = array.map(function (a) {
var o = {};
a.forEach(function (b) {
o[b[0]] = b[1];
});
return o;
});
console.log(result);
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
答案 1 :(得分:3)
使用Array#map
迭代数组,并将Array#reduce
每个子数组转换为一个对象:
array = [[['Name', 'Arusha'], ['Species', 'Arabica'], ['Region', 'Mount Meru in Tanzania, and Papua New Guinea'], ['Comments', 'Typica variety or a French Mission']], [['Name', 'Catimor'], ['Species', 'Interspecific hybrid'], ['Region', 'Latin America'], ['Comments', 'This is cross between Timor coffee and Caturra coffee. It was created in Portugal in 1959']]];
var result = array.map(function(arr) {
return arr.reduce(function(obj, tuple) {
obj[tuple[0]] = tuple[1];
return obj;
}, {});
});
console.log(result);