2016-11-11 149 views
-7

这是我已被分派到一个对象数组对象的数组。如何将嵌套的数组对转换为数组中的对象

var arr = [ 
    [ 
    ['firstName', 'Joe'], 
    ['lastName', 'Blow'], 
    ['age', 42], 
    ['role', 'clerk'], 
    [ 
     ['firstName', 'Mary'], 
     ['lastName', 'Jenkins'], 
     ['age', 36], 
     ['role', 'manager'] 
    ] 
    ] 
] 

]

我想对象的数组,看起来像这样

[ {姓: '乔',名字: '吹',年龄:42,作用: '业务员' },

{firstName: 'Mary', lastName: 'Jenkins', age: 36, role: 'manager'} 

]

+3

请付出你已经采取了什么努力 和你想要什么输出 – pareshm

+0

什么是输出格式? – abhishekkannojia

+1

你想要这样 - var arr = [{'firstName':'Joe','lastName':'Blow','age':42,'role':'clert'},{'firstName':'Mary' ,'lastName':'Jenkins','age':36,'role':'manager'}] – Chetan

回答

-1

如果格式化你的代码,你会先看到有1 CL最后缺少支撑']'。你的结构是这样的

var arr = [ 
    [ 
     ['firstName', 'Joe'], 
     ['lastName', 'Blow'], 
     ['age', 42], 
     ['role', 'clerk'], 
     [ 
      ['firstName', 'Mary'], 
      ['lastName', 'Jenkins'], 
      ['age', 36], 
      ['role', 'manager'] 
     ] 
    ] 
] 

我想你想要做这样的事情

var arr = [ 
    [ 
     ['firstName', 'Joe'], 
     ['lastName', 'Blow'], 
     ['age', 42], 
     ['role', 'clerk'] 
    ], 
    [ 
     ['firstName', 'Mary'], 
     ['lastName', 'Jenkins'], 
     ['age', 36], 
     ['role', 'manager'] 
    ] 
]; 

但我会建议你做这样的

var arr = [ 
    { 
     'firstName': 'Joe', 
     'lastName': 'Blow', 
     'age': 42, 
     'role': 'clerk' 
    }, 
    { 
     'firstName': 'Mary', 
     'lastName': 'Jenkins', 
     'age': 36, 
     'role': 'manager' 
    } 
]; 
+0

请删除评论与负面投票。所以我可以得到我错在哪里 –

1

你可以把它像这 -

0

示例对象的数组

var arr = [ 
    { 
     'firstName' : 'Joe', 
     'lastName' : 'Blow', 
     'age' : 42, 
     'role' : 'clerk' 
    }, 
    { 
     'firstName' : 'Mary', 
     'lastName' : 'Jenkins', 
     'age' : 36, 
     'role' : 'manager' 
    } 
]; 
2

编程溶液(太在https://jsfiddle.net/edorka/jnLxyzhb/可用)的:

var arr = [[ ['firstName', 'Joe'], ['lastName', 'Blow'], ['age', 42], ['role', 'clerk']], [['firstName', 'Mary'], ['lastName', 'Jenkins'], ['age', 36], ['role', 'manager'] ]]; 

var empty = {}; 
var result = arr.map(function(objectArray){ 
    var object = this; 
    var attribute = objectArray.map(function(attrArray){ 
     var name = attrArray[0], value = attrArray[1]; 
     object[name] = value; 
     return object; 
    }, object); 
    return this; 
}, empty); 

console.log(result); 
0

你可以使用用于嵌套的数组的迭代和递推方法。

var array = [[['firstName', 'Joe'], ['lastName', 'Blow'], ['age', 42], ['role', 'clerk'], [['firstName', 'Mary'], ['lastName', 'Jenkins'], ['age', 36], ['role', 'manager']]]], 
 
    result = []; 
 

 
array[0].forEach(function iter(a, i) { 
 
    i || result.push({}); 
 
    if (i < 4) { 
 
     result[result.length - 1][a[0]] = a[1]; 
 
     return; 
 
    } 
 
    Array.isArray(a) && a.forEach(iter); 
 
}); 
 
    
 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

+0

不知道嵌入式片段,谢谢你的回应。但恕我直言,我看到你的解决方案受限于属性的数量(四),但这将缺乏弹性,我的意思是,如果我== 2那么它是一个名称/值元组。 – Edorka

+0

我使用了我拥有的数据,它看起来像前四个元素是为了成为对象的一部分。 –

+0

https://codeshare.io/5ZL8VG @NinaScholz –

0
function convert(array) { 
    return array.map(function(person) { 
    return person.reduce(function(obj, prop, index) { 
     if (!obj[prop[0]]) { 
     obj[prop[0]] = prop[1]; 
     } 

     return obj; 
    }, {}); 
    }); 
} 
  • 使用地图功能,以选择每个 “人” 阵列
  • 使用减少函数应用于每个 “人” 阵列转换为对象
  • 的map函数还会返回一个新的对象数组
  • 原来的阵列将不会被改变
相关问题