我在这里有一个数组:
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);
任何帮助?
答案 0 :(得分:2)
<小时/>
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));
答案 1 :(得分:1)
您可以映射到数组并分配动态属性,例如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);
&#13;
答案 2 :(得分:1)
你可以使用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);
答案 3 :(得分:0)
见这一个:
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));
答案 4 :(得分:-1)
您尚未指定合并用户的方式。这将获取您的用户对象数组,并将所有结果减少到一个对象中,并提供所有值的数组。
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)
)
&#13;