使用下划线在JavaScript中合并数组对象?

时间:2018-04-05 07:33:06

标签: javascript arrays node.js angular underscore.js

我有两个数组,我希望将它们组合起来以获得共同的结果。 数组应该基于 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
}]; 

1 个答案:

答案 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>

<强>文档: