簡體   English   中英

將數組合並到對象數組JavaScript

[英]Merge Array to Object Array JavaScript

我這里有一個數組:

var array = [
    [
        ['firstName', 'Nork'], ['lastName', 'James'], ['age', 22], ['position', 'writer']
    ],
    [
        ['firstName', 'James'], ['lastName', 'Rodel'], ['age', 25], ['position', 'programmer']
    ]
];

我創建了一個函數,將我的函數轉換為obj數組,如下所示:

[
    {firstName: 'Nork', lastName: 'James', age: 22, position: 'writer'},
    {firstName: 'James', lastName: 'Rodel', age: 25, role: 'programmer'}
]

所以我創建了一個功能來做到這一點。 但是我不知道從哪里開始讓我合並它們。

function changeData(array) {
  var obj = { };

}

changeData(array);

有幫助嗎?

[].reduce使用[].map


map()方法創建一個新數組,其結果是在此數組中的每個元素上調用提供的函數。


reduce()方法對累加器和數組中的每個元素(從左到右)應用一個函數,將其減少為單個值。

 var array = [ [ ['firstName', 'Nork'], ['lastName', 'James'], ['age', 22], ['position', 'writer'] ], [ ['firstName', 'James'], ['lastName', 'Rodel'], ['age', 25], ['position', 'programmer'] ] ]; function mergeObjectArray(array) { return array.map(function(el) { return el.reduce(function(a, b) { a[b[0]] = b[1]; return a; }, {}) }); } console.log(mergeObjectArray(array)); 

您可以映射到數組並分配動態屬性,例如obj[prop] = value

 var array = [ [ ['firstName', 'Nork'], ['lastName', 'James'], ['age', 22], ['position', 'writer'] ], [ ['firstName', 'James'], ['lastName', 'Rodel'], ['age', 25], ['position', 'programmer'] ] ]; var convertedArray = array.map(function(line){ var obj = {}; line.forEach(function(prop){ obj[prop[0]]=prop[1]; }); return obj; }); console.log(convertedArray); 

您可以使用Array.prototype.map()在其回調中循環遍歷第一個數組以及Array.prototype.forEach()以循環遍歷子數組並將它們合並到一個唯一對象中:

var merged = array.map(function(arr) {
  var obj = {};
  arr.forEach(function(item) {
    obj[item[0]] = item[1];
  });
  return obj;
});

演示:

 var array = [ [ ['firstName', 'Nork'], ['lastName', 'James'], ['age', 22], ['position', 'writer'] ], [ ['firstName', 'James'], ['lastName', 'Rodel'], ['age', 25], ['position', 'programmer'] ] ]; var merged = array.map(function(arr) { var obj = {}; arr.forEach(function(item) { obj[item[0]] = item[1]; }); return obj; }); console.log(merged); 

看到這個:

var array = [
    [
        ['firstName', 'Nork'], ['lastName', 'James'], ['age', 22], ['position', 'writer']
    ],
    [
        ['firstName', 'James'], ['lastName', 'Rodel'], ['age', 25], ['position', 'programmer']
    ]
];

function changeData(array)
{
    var i,j;
    var ret = [];
    var tmp = {};

    // rotate through every line and create a temporary object which we push to the return array
    for (i=0;i<array.length;i++)
    {
        tmp = {};
        for (j=0;j<array[i].length;j++) tmp[ array[i][j][0] ] = array[i][j][1];
        ret.push(tmp);
    }
    return ret;
}

console.log(changeData(array));

您尚未指定要合並用戶的方式。 這將獲取您的用戶對象數組,並將所有結果減少到一個對象中,並提供所有值的數組。

 var array = [ {firstName: 'Nork', lastName: 'James', age: 22, position: 'writer'}, {firstName: 'James', lastName: 'Rodel', age: 25, role: 'programmer'} ] function changeData(array) { return array.reduce((users, user) => { Object.keys(user).forEach(key => { users[key+'s'] = Array.isArray(users[key+'s']) ? users[key+'s'].concat(user[key]) : [user[key]] }) return users }, {}) } console.log( changeData(array) ) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM