如何解决合并两个对象数组,而不会重复某些值
我得到了这两个对象数组:
数组 1:
[{myObject1: "xx"},{myObject2: "yy"},{myObject3: "zz"},{myObject4: "tt"},{myObject5: "bb"}]
数组 2:
[{myOtherObject1: "aa"},{myObject2: "bb"},{myAnotherObject3: "zz"},{oneMoreObject4: "kk"}]
目标是将数组 2 更改为没有重复值的数组:"zz" 和 "bb"
所以结果是:
[{myOtherObject1: "aa"},{oneMoreObject4: "kk"}]
我该怎么做?
解决方法
我假设输入对象可以有多个键
let input1 = [
{ myObject1: "xx" },{ myObject2: "yy" },{ myObject3: "zz" },{ myObject4: "tt" },{ myObject5: "bb" }
];
let map = {};
input1.forEach(x => {
Object.values(x).forEach(y=>map[y]=true);
});
let input2 = [
{ myOtherObject1: "aa" },{ myObject2: "bb" },{ myAnotherObject3: "zz" },{ oneMoreObject4: "kk" }
];
let result = input2.filter(x => {
return !(Object.values(x).some(y => map[y]))
});
console.log(result)
这应该有效
const array1 = [{myObject1: "xx"},{myObject2: "yy"},{myObject3: "zz"},{myObject4: "tt"},{myObject5: "bb"}];
const array2 = [{myOtherObject1: "aa"},{myObject2: "bb"},{myAnotherObject3: "zz"},{oneMoreObject4: "kk"}];
const result = array2.filter(i => {
const value = Object.values(i)[0];
return !array1.find(f => Object.values(f)[0] === value);
});
// Expected output: [{myOtherObject1: "aa"},{oneMoreObject4: "kk"}]
,
const a = [{a: 1},{b: 2},{c: 3},{d: 4},{e: 5}];
const b = [{a: 6},{b: 7},{c: 1},{d: 2},{e: 3}];
const result = b.filter(obj1 => {
const value = Object.values(obj1)[0];
return a.every(obj2 => Object.values(obj2)[0] !== value);
});
好吧,稍微解释一下。我相信它会对其他人有所帮助。
const result = b.filter(obj1 => {
创建一个过滤槽 b
数组,以获取一个新数组,该数组将仅包含以以下条件返回的元素。必须迭代数组中的每个对象,因此 obj1
表示过滤器正在迭代的“当前”对象。
const value = Object.values(obj1)[0];
从数组中的对象中获取值,因为对象具有 key
和 value
部分,这意味着 key: value
对,它与 a: 6
一样作为第一个元素b
数组。从字面上看,如果 {a: 6}
对象值在此处为 6
。
return a.every(obj2 => ...
对于我们在过滤器中迭代的 b
元素中的每个项目,我们还应该遍历 a
数组,以比较相同或不同的项目。
Object.values(obj2)[0] !== value
好吧,这里的左侧也包含值,但是从 obj2
对象中,请记住 obj2
迭代 a
数组。然后我们一直在比较这些值以排除那些值会重复的对象。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。