将多深度数组对象转换为对象数组

时间:2016-12-06 18:23:00

标签: javascript arrays object

我在将类似数组的对象数组转换为对象数组时遇到了一些麻烦。我正在使用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' ]

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:4)

您可以使用Array#map并为外部数组的每个元素返回一个新对象。在里面,您可以迭代所有项目并构建新属性。

&#13;
&#13;
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;
&#13;
&#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);