使用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
}));
});
答案 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;
}, []);
答案 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>