javascript 检查数组中的所有值是否相等,但忽略空值[重复]

yfwxisqw  于 2023-06-20  发布在  Java
关注(0)|答案(2)|浏览(111)

此问题已在此处有答案

In Javascript, how do I check if an array has duplicate values?(10个答案)
9小时前关闭。
这篇文章是编辑并提交审查1小时前.
我有一个字符串和空值的列表。现在我想检查列表中的所有字符串是否都相同,是否应该忽略null。比如说

  • [null, "a", "a", null, "a"]的计算结果应为true,因为所有字符串都相等
  • [null, "a", "a", null, "b"]的计算结果应该是false,因为存在“b”和“a”

SO上还有其他一些问题与查找重复或相等的值有关,但它们似乎都没有考虑null值。
我已经考虑过用

  • 保存第一个字符串,然后在以后的迭代中与它进行比较
  • 一个filter后接every

然而,我想知道是否有一个更好的更直观的方法来做到这一点。

fhg3lkii

fhg3lkii1#

你可以这样做

set = new Set(yourArray)
set.delete(null)
if (set.size === 1)
   // unique
mzmfm0qo

mzmfm0qo2#

  • 保存第一个字符串,然后在以后的迭代中与它进行比较
  • 一个过滤器,后面跟着每个

你可以用一个空变量,后面跟着every:

let j; // first non null value
const result = array.every((v,i,a) => v === null || v === a[j??=i]) && j != null;
  • 编辑:* 好,让我们把这个拆开:
  • every((v,i,a) => v === null || ...)检查每个元素是null还是...
  • 因此v === a[j??=i]仅在vnotnull时执行
  • j ??= i基本上是j === null || j === undefined ? (j = i) : j的简写,因此j将采用第一个i,其中v !== null
  • 但是我们的循环并不区分array.every((v,i,a) => v === null)array.every((v,i,a) => v === a[j??=i]),所以我们还想通过检查索引j不再为null来检查v === a[j??=i]是否至少执行过一次。

相关问题