对象替换以前的数据

时间:2017-02-08 05:46:09

标签: javascript arrays object

我有一个函数,我得到一个数组,然后我将它作为一个对象返回

功能在

之下
function arrayToObject(array) {
    var obj = {};

    for(var i = 0 ; i<array.length; i++){ 
        for(var j = 0; j<array[i].length; j++){
            console.log(array[i][j][0]
                                +"-"+
                        array[i][j][1]);
            obj[array[i][j][0]] = array[i][j][1];
        }
    }
    console.log("-----------");
    console.log(obj);
} 

数组是

var array = [
[
    ['Vehicle', 'Car'], ['Engine', 'V6'], ['Year', 2001], ['Make', 'Holden']
]
,
[
    ['Vehicle', 'Car'], ['Engine', 'V8'], ['Year', 2001], ['Make', 'Holden']
]
];

我称之为

arrayToObject(array);

输出是

Vehicle-Car    
Engine-V6    
Year-2001    
Make-Holden    
Vehicle-Car    
Engine-V8    
Year-2001
Make-Holden        
-----------    
{ Vehicle: 'Car', Engine: 'V8', Year: 2001, Make: 'Holden' }

它不包含之前的汽车细节

我一直在尝试使用Array.Reduce,但我无法理解如何将它用于嵌套数组。如果有一种更简单的方法可以做到这一点,那将非常有帮助。

3 个答案:

答案 0 :(得分:0)

同一属性名称应在对象中覆盖,因此将其转换为像

这样的对象数组
[{ Vehicle: 'Car', Engine: 'V8', Year: 2001, Make: 'Holden' },{ Vehicle: 'Car', Engine: 'V8', Year: 2001, Make: 'Holden' }]

如下

var array = [
[
    ['Vehicle', 'Car'], ['Engine', 'V6'], ['Year', 2001], ['Make', 'Holden']
]
,
[
    ['Vehicle', 'Car'], ['Engine', 'V8'], ['Year', 2001], ['Make', 'Holden']
]
];

var arrR = [];
array.forEach(function(ele){
var temp = {};
  ele.forEach(function(innerEle){
  	temp[innerEle[0]] = innerEle[1]
  });
  arrR.push(temp);
})

console.log(arrR)

答案 1 :(得分:0)

这是使用mapreduce的解决方案:

&#13;
&#13;
let result = array.map(function(properties) {
 return properties.reduce(function(acc, property) {
   acc[property[0]] = property[1];
   return acc;
 }, {});
});
&#13;
&#13;
&#13;

答案 2 :(得分:-1)

我在这里使用reduce和map

制作了es6

https://es6console.com/iywjoob3/

function arrayToObject(array) {
    const obj = array.map(car =>  {
      return car.map(k => ({ [k[0]]: k[1] })).reduce((p, c) => Object.assign(p, c), {})
    })
    console.log("-----------");
    console.log(obj);
}