【问题标题】:How to check exactly duplicate object in array? [duplicate]如何检查数组中完全重复的对象? [复制]
【发布时间】:2021-07-23 11:31:46
【问题描述】:

我是 javascript 初学者,我想检查数组中完全重复的对象 像这样

array = [{name: 'Tom', email: 'Tom@gmail.com'},{name: 'Pete', email: 'Pete@gmail.com'}]

然后我有对象object = {name: 'Tom', email: 'Tom@gmail.com'}

当我将对象推送到 array.push(object) 之类的数组时

我想检查数组(array[0])中的对象是否完全重复(每个键中的值相同)对象

怎么做?

【问题讨论】:

  • @ProgrammingRage 不,如果数组中不存在我想要推送的对象,我想将对象推送到数组中
  • 在所有验证成功之前不要将对象推入数组。如果任何验证失败,则只需打印它是重复的或执行您打算执行的任何操作。

标签: javascript arrays object


【解决方案1】:

使用Set

  • 创建一个Set 并将所有值与一些您确定不会出现在您的值中的分隔符字符串连接起来(我选择了+)。

  • 因此,对于这个对象{ name: "Tom", email: "Tom@gmail.com" },我们将Tom+Tom@gmail.com 存储在Set 中。

  • 现在,在再次推送时,使用相同的分隔符字符串连接所有值,并检查 Set 中是否存在。

    • 如果有,请不要推
    • 否则将其推送到数组中。

我尝试在下面的 sn-p 中推送两个对象,第一个对象没有被推送,而第二个对象被推送。

警告

  • 假设您有一个对象,其中name"Tom+"email"Tom@gmail.com" ({ name: "Tom", email: "Tom@gmail.com" })。

  • 所以我们将"Tom++Tom@gmail.com" 存储在Set

  • 现在假设我们要插入一个对象,其中nameTomemail+Tom@gmail.com,这绝对是与上述对象不同的对象。

  • 但由于我们再次生成相同的字符串Tom++Tom@gmail.com 来签入Set,因此我们不会将此对象推送到数组中。

因此,明智地选择分隔符字符串至关重要。

const 
  arr = [{ name: "Tom", email: "Tom@gmail.com" }, { name: "Pete", email: "Pete@gmail.com" }],
      
  s = new Set(arr.map((o) => Object.values(o).join("+"))),

  addNewObj = (arr, obj) => {
    if (!s.has(Object.values(obj).join("+"))) {
      arr.push(obj);
    }
  };

addNewObj(arr, { name: "Tom", email: "Tom@gmail.com" });
addNewObj(arr, { name: "John", email: "John@gmail.com" });

console.log(arr);

【讨论】:

  • @Marimokung 请检查这是否解决了您的问题,如果您有任何问题,请告诉我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-11
相关资源
最近更新 更多