2016-12-06 145 views
1

我在将数组类对象转换为对象数组时遇到了一些麻烦。我正在使用reduce方法,它正确地将数组数据转换为第一组数组的对象,但第二次通过时,它将数据正确地设置为key:value对,但不会将其放置在I希望它是在将数组对象的多深度数组转换为对象数组

这里是阵列和功能:

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' ] 

任何帮助将不胜感激!

+1

您正在寻找'地图()' - >'reduce()' –

+1

可能是lodash _flatMap会帮你 –

+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);
.as-console-wrapper { max-height: 100% !important; top: 0; }

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

+0

这是另一个很好的方法来实现这一点,它仍然包含我最初坚持使用的减少。谢谢! –