微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

合并两个对象数组,而不会重复某些值

如何解决合并两个对象数组,而不会重复某些值

我得到了这两个对象数组:

数组 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]; 从数组中的对象中获取值,因为对象具有 keyvalue 部分,这意味着 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 举报,一经查实,本站将立刻删除。