【问题标题】:Compare two Arrays with Objects and create new array with unmatched objects比较两个数组与对象并创建具有不匹配对象的新数组
【发布时间】:2018-05-18 11:23:01
【问题描述】:

我有以下两个 Javascript 数组:

const array1 = [{ id: 1}, { id: 2 }, { id: 3 }, { id: 4}];
const array2 = [{ id: 1}, { id: 3 }];

我现在想要一个新数组 array3,其中仅包含 array2 中尚不存在的对象,因此:

const array3 = [{ id: 2}, { id: 4 }];

我尝试了以下方法,但它返回所有对象,当我将条件更改为=== 时,它返回array2 的对象。

const array3 = array1.filter(entry1 => {
  return array2.some(entry2 => entry1.id !== entry2.id);
});

有什么想法吗?欢迎使用 ES6

【问题讨论】:

    标签: javascript arrays ecmascript-6


    【解决方案1】:

    Nina 的回答是一个好的开始,但会遗漏数组 2 中的任何唯一元素。 这扩展了她的答案以从每个数组中获取唯一元素,然后将它们组合起来:

    const
        array1 = [{ id: 1 }, { id: 2 }, { id: 3 }, { id: 4 }],
        array2 = [{ id: 1 }, { id: 3 }, { id: 5 }],
        array3 = array1.filter(entry1 => !array2.some(entry2 => entry1.id === entry2.id)),
        array4 = array2.filter(entry1 => !array1.some(entry2 => entry1.id === entry2.id)),
        array5 = array3.concat(array4);
    
    console.log(array5);

    【讨论】:

      【解决方案2】:

      您可以反转比较(等于而不是不等于)并返回 some 的否定结果。

      const
          array1 = [{ id: 1 }, { id: 2 }, { id: 3 }, { id: 4 }],
          array2 = [{ id: 1 }, { id: 3 }],
          array3 = array1.filter(entry1 => !array2.some(entry2 => entry1.id === entry2.id));
          //                               ^                                ^^^
      
      console.log(array3);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-01-04
        • 1970-01-01
        • 2022-01-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多