Javascript 对象数组的Lodash并集
我想使用Javascript 对象数组的Lodash并集,javascript,lodash,Javascript,Lodash,我想使用\uuu.union函数创建两个对象数组的并集。Union仅在使用===检查两个值是否相等时才使用基元数组 我想比较使用键属性的对象:具有相同键属性的对象将被视为相等。理想情况下,使用lodash是否有一种很好的功能性方法来实现这一点?这是一种非纯lodash方法,但使用array.concat函数,您可以非常简单地使用uniq(): 另一种方法是使用和: 那之前用两个数组的concat呢 从“lodash”导入 常数arrayUnion=(arr1,arr2,标识符)=>{ 常量数组=
\uuu.union
函数创建两个对象数组的并集。Union仅在使用===检查两个值是否相等时才使用基元数组
我想比较使用键属性的对象:具有相同键属性的对象将被视为相等。理想情况下,使用lodash是否有一种很好的功能性方法来实现这一点?这是一种非纯lodash方法,但使用array.concat函数,您可以非常简单地使用
uniq()
:
另一种方法是使用和:
那之前用两个数组的concat呢
从“lodash”导入
常数arrayUnion=(arr1,arr2,标识符)=>{
常量数组=[…arr1,…arr2]
返回uqby(数组,标识符)
}
常量数组1=[{id:1},{id:2},{id:3}]
常量数组2=[{id:3},{id:4},{id:4}]
log(arrayUnion(array1,array2,'id'))
结果→ [{'id':1},{'id':2},{'id':3},{'id':4}]
\uu.unionBy(array1、array2、matcherFn)代码>从数组中删除合并对象
const test1=[
{姓名:'zhanghong',年龄:32岁,货币:0,尺码:12,},
{姓名:'wanghong',年龄:20岁,尺码:6},
{姓名:'金红',年龄:16岁,身高:172},
]
常数test2=[
{姓名:张红,性别:男,年龄:14},
{姓名:'wanghong',性别:'female',年龄:33},
{姓名:'lihong',性别:'female',年龄:33},
]
常数test3=[
{name:'meinv'},
]
常数test4=[
{name:'aaa'},
]
常数test5=[
{姓名:'zhanghong',年龄:'wtf'},
]
const result=mergeUnionByKey(test1、test2、test3、test4、[]、test5、‘name’、‘override’)
函数mergeUnionByKey(…args){
常量配置=389;.chain(args)
.filter(u.isString)
.value()
常量键=551;.get(配置“[0]”)
const strategy=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
如果(!\ isString(键))
抛出新错误('缺少密钥')
常量数据集=389;.chain(args)
.reject(u.isEmpty)
.filter(u.isArray)
.value()
const datasetsIndex=\.mapValues(数据集,数据集=>\.keyBy(数据集,键))
const uniqKeys=qkeys.chain(数据集)
.flatte()
.地图(图例)
.uniq()
.value()
返回链(单键)
.map(val=>{
常量数据={}
_.each(数据集索引,数据集=>策略(数据,数据集[val]))
返回数据
})
.过滤器(键)
.value()
}
console.log(JSON.stringify(result,null,4))
晚会迟到了,但unionWith做你想做的事要好得多
var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
_.unionWith(objects, others, _.isEqual);
// => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]
使用键属性比较对象:-
_.unionBy(array1,array2,'propname')
使用“所有关键点”属性比较对象:-
_.unionWith(array1,array2,u.isEqual)
使用字符串键属性以不区分大小写的方式比较对象:-
_.unionWith(array1,array2,函数(obj,other){返回obj.propname.toLowercase()==other.propname.toLowercase();})
propname是对象的关键属性的名称。什么是matcherFn或matcher?matcherFn/matcher只是我说你编写的函数来确定对象是否唯一谢谢:)你节省了我不少时间。我真的不想写这个函数,lolI在这里看不到两个数组正在合并。@SirajAlam合并在这里完成:const array=[…arr1,…arr2]
var union = _.uniq(_.flatten([array1, array2]), matcherFn);
var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
_.unionWith(objects, others, _.isEqual);
// => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]