2016-11-11 125 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函數還會返回一個新的對象數組
  • 原來的陣列將不會被改變
相關問題