【问题标题】:merge two arrays of objects without duplicates of certain values [closed]合并两个对象数组而不重复某些值[关闭]
【发布时间】:2021-09-11 00:35:45
【问题描述】:

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

数组 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"}]

我该怎么做?

【问题讨论】:

标签: javascript arrays concatenation javascript-objects


【解决方案1】:
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 数组。然后我们一直在比较这些值以排除值将重复的对象。

【讨论】:

  • 请稍微解释一下你的代码,这样对 OP 和未来的读者更有帮助,同时增加它的长期价值
  • 是的,你是对的,我已经添加了解释。谢谢。
【解决方案2】:

我假设输入对象可以有多个键

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)

【讨论】:

    【解决方案3】:

    这应该可以工作

    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"}]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-15
      • 2021-03-18
      • 1970-01-01
      • 1970-01-01
      • 2019-06-14
      • 1970-01-01
      • 2021-07-28
      • 2021-07-01
      相关资源
      最近更新 更多