当每个数组中的id具有不同类型(字符串,数字)时合并两个数组

时间:2017-06-26 19:34:44

标签: javascript lodash

使用lodash,当一个数组的id为字符串时,如何通过比较id来合并两个数组,另一个数组的id是否为数字?

var a = [{
  id: 1,
  item: 1
}, {
  id: 2,
  item: 2
}, {
  id: 3,
  item: 4
}];

var b = [{
  id: "1",
  profile: 1
}, {
  id: "2",
  profile: 2
}];

这是我尝试过的。如果两个数组中的ID都是字符串或两个ID都是数字,则此方法可以正常工作。添加toString()或parseInt似乎也不起作用。

return  _.map(a, function(obj) {
    return _.assign(obj, _.find(b, {
        id: obj.id
    }));
});

3 个答案:

答案 0 :(得分:1)

如何将自定义函数传递给_.find()方法?

return  _.map(a, function(obj) {
    return _.assign(obj, _.find(b, function(o) {
        return o.id == obj.id;
    }));
});

答案 1 :(得分:0)

const merged = _.reduce(a, (acc, obj) => {
    const match = _.find(b, val => obj.id == val.id);
    return match ? _.concat(acc, _.assign(obj, match)) : acc;
}, []);

工作小提琴:https://jsfiddle.net/f6ss8vau/

答案 2 :(得分:0)

您可以使用lodash的_.merge()。它以递归方式合并数组和对象,并执行松散相等(==)以合并属性:

var a = [{"id":1,"item":1},{"id":2,"item":2},{"id":3,"item":4}];

var b = [{"id":"1","profile":1},{"id":"2","profile":2}];

var result = _.merge([], a, b);

console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>