【问题标题】:How to ignore empty values in array when checking for duplicates - Javascript检查重复项时如何忽略数组中的空值 - Javascript
【发布时间】:2018-02-19 08:49:02
【问题描述】:

在 Javascript 中,我正在测试两个数组以检查重复项。我在 ES6 中找到了一个很好的简单方法

function hasDuplicates(MyArray) {
    return new Set(MyArray).size !== MyArray.length;
      }

但是,我希望它忽略数组中的空值,因为它会将空值视为重复项。

我的数组如下所示:["name 0", "name", "name 2", "", ""]

我该怎么做?

【问题讨论】:

  • 请分享这两个数组并说明这个函数是如何调用的
  • 注意如果MyArrayObjects的数组,它会检查对象的引用是否相同,而不是数据本身
  • 如何在删除空值后创建一个新数组,然后使用 Set size 检查长度
  • @brk 添加了数组。
  • @elvis_ferns 我会试试的,谢谢

标签: javascript arrays duplicates compare


【解决方案1】:

只需在return 语句之前添加这一行

var tmpArray = MyArray.filter( s => (s || !isNaN(s)) && String(s).length > 0 );

并在返回语句中使用这个数组

return new Set( tmpArray ).size !== tmpArray.length;

或者只是扩展同一行以检查重复项

return MyArray.filter( ( s, i, arr ) => 
         (s || !isNaN(s)) && String(s).length > 0 
           && arr.indexOf( s, i + 1 ) != -1 ).length > 0; 

如果有重复,这将返回true

【讨论】:

    【解决方案2】:

    如果您想返回 dupe 数组作为结果,这是我对您的问题的解决方案:

    let data = ["101", "", "", "666"];
    let compData = ["", "", "666", "101"];
    var result = data.filter((value) => {
        if(value !="" && compData.indexOf(value) > -1)
            return value;
    })   
    

    输出:

    ["101", "666"]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 2012-06-16
      • 2021-12-08
      • 2011-12-29
      • 2020-12-02
      相关资源
      最近更新 更多