我有两个数组,我希望将它们组合起来以获得共同的结果。 数组应该基于 user_id 而不是索引来组合 我该怎么做?
数组1 :
var array1 = [{
"name": "Smart Test Pool",
"user_id": 1,
"total_time": "15.0",
}];
数组2 :
var array2 = [{
"user_id": 1,
"total_hours_worked_milliseconds": 60060000,
"total_time_unshedule_milliseconds": 540000
}];
结果:
var result = [{
"name": "Smart Test Pool",
"user_id": 1,
"total_time": "15.0",
"total_hours_worked_milliseconds": 60060000,
"total_time_unshedule_milliseconds": 540000
}];
答案 0 :(得分:4)
您可以使用以下方法合并对象:
1-简单JS方法:
您可以使用.map()
,.find()
和Object.assign()
:
let result = array1.map(o => Object.assign(
{}, o, array2.find(o2 => o2["user_id"] === o["user_id"])
));
或传播语法:
let result = array1.map((o, i) => (
{...o,...array2.find(o2 => o2["user_id"] === o["user_id"])}
));
<强>演示:强>
let array1 = [{
"name": "Smart Test Pool",
"user_id": 1,
"total_time": "15.0",
}];
let array2 = [{
"user_id": 1,
"total_hours_worked_milliseconds": 60060000,
"total_time_unshedule_milliseconds": 540000
}];
let result = array1.map(o => Object.assign(
{}, o, array2.find(o2 => o2["user_id"] === o["user_id"])
));
console.log(result);
2-下划线
您可以使用.map()
和.extend()
方法:
let result = _.map(array1, function(o) {
return _.extend({}, o, _.find(array2, function(o2) {
return o2["user_id"] === o["user_id"]
}));
});
<强>演示:强>
let array1 = [{
"name": "Smart Test Pool",
"user_id": 1,
"total_time": "15.0",
}];
let array2 = [{
"user_id": 1,
"total_hours_worked_milliseconds": 60060000,
"total_time_unshedule_milliseconds": 540000
}];
let result = _.map(array1, function(o) {
return _.extend({}, o, _.find(array2, function(o2) {
return o2["user_id"] === o["user_id"]
}));
});
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
<强>文档:强>