【问题标题】:Check if duplicates from javascript list based on multiple conditions检查是否根据多个条件从 javascript 列表中重复
【发布时间】:2021-01-22 04:29:09
【问题描述】:

我有一个 javascript 列表:

[
{'firstname':'John', 'lastname':'Smith', 'address': 'street 1', 'index':1},
{'firstname':'John', 'lastname':'Smith', 'address': 'street 1', 'index':2},
{'firstname':'Lisa', 'lastname':'Smith', 'address': 'street 1', 'index':3},
{'firstname':'Lisa', 'lastname':'Jonas', 'address': 'street 1', 'index':4}
]

即使索引不同,前两个对象也是重复的。

我只需要知道(布尔值)列表中是否有骗子,即。如果名字和姓氏和地址与列表中的其他对象相同。

有没有一种聪明的方法来编写一个处理这个问题的箭头函数?

/每

【问题讨论】:

    标签: javascript duplicates javascript-objects arrow-functions


    【解决方案1】:

    使用Array.reduce,可以提取出重复信息如下。

    const input = [
      {'firstname':'John', 'lastname':'Smith', 'address': 'street 1', 'index':1},
      {'firstname':'John', 'lastname':'Smith', 'address': 'street 1', 'index':2},
      {'firstname':'Lisa', 'lastname':'Smith', 'address': 'street 1', 'index':3},
      {'firstname':'Lisa', 'lastname':'Jonas', 'address': 'street 1', 'index':4}
    ];
    
    const duplicates = input.reduce((acc, cur) => {
      const key = `${cur.firstname}_${cur.lastname}_${cur.address}`;
      acc[key] ? acc[key]++ : acc[key] = 1;
      return acc;
    }, {});
    
    const hasDuplicates = Object.values(duplicates).some(count => count > 1);
    console.log(hasDuplicates);

    【讨论】:

      【解决方案2】:

      您可以遍历该对象并比较除 "index" 之外的所有属性。这样,如果您将来放置更多属性,代码仍然可以工作。

      你应该这样做:

      var a = [
      {'firstname':'John', 'lastname':'Smith', 'address': 'street 1', 'index':1},
      {'firstname':'John', 'lastname':'Smith', 'address': 'street 1', 'index':2},
      {'firstname':'Lisa', 'lastname':'Smith', 'address': 'street 1', 'index':3},
      {'firstname':'Lisa', 'lastname':'Jonas', 'address': 'street 1', 'index':4}
      ]
      var l = a.length;
      for (var k = 0; k < l; k++) {
          for (var i = 0; i < l; i++) {
              if(k == i) break;
              var gonnaBeEqual = true;
              for (var prop in a[i]) {
                  if (a[k][prop] != a[i][prop] && prop != "index") {
                      gonnaBeEqual = false;
                  }
              }
              if (gonnaBeEqual) console.log("the object number "+(k+1)+" and the object number "+(i+1)+" are equals")
          }
      }
      

      在fors里面的if,我做了一个prop != "index",因为我不希望它比较index的属性。

      两个拳头fors 做比较的事情,而第三个for 做对对象属性的访问。

      最后一个if,带有gonnaBeEqual 的那个,检查某些属性是否不相等,如果只有一个不相等,则为false。

      【讨论】:

        猜你喜欢
        • 2021-07-11
        • 2014-10-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多