【问题标题】:Check if multiple array values are equal检查多个数组值是否相等
【发布时间】:2015-03-04 12:20:24
【问题描述】:

所以我有一个包含 3 个可能值的数组:0、1 或 2

var a = [0,0,0];

我想检查 a[0]、a[1] 和 a[2] 是否都具有相同的值“1”或“2”。我该怎么做?

所以 0,0,0 会返回 false,1,2,1 会返回 false,但 1,1,1 或 2,2,2 会返回 true。

【问题讨论】:

  • 为什么 0,0,0 是假的?
  • 因为我正在制作一个游戏,它必须检查玩家 1 或玩家 2 是否拥有所有 3 个对象。所以 0 不算数。
  • 试试这个stackoverflow.com/questions/14832603/… 但这只检查是否所有都相等,然后你必须检查 a[0] 是 0 还是 1/2

标签: javascript arrays


【解决方案1】:

试试这个:

function checkArray(array){
    var firstElement = array[0];
    if(!firstElement) return false;

    var result = true;

    array.forEach(function(elem){
        if(elem != firstElement) result = false;
    });

    return result;
}

【讨论】:

  • 您可以轻松地使用if(!array.length) return false; 而不是分配firstelement。我就是这样做的,但我有点喜欢下面的 reduce 函数。
  • 语义,但您可以在 foreach 循环内返回 false 并在您已经知道它为 false 时省去继续查看的工作。
  • 关于 if(!array.length) return false;我认为我们必须检查数组是否为空、0 或未定义
  • 好吧,我想这很好。我看不到您每秒都在更新 :) 您的脚本可以工作,而且很容易理解。我喜欢。
  • 这正是我想要做的。谢谢。
【解决方案2】:

正则表达式解决方案很慢,如http://jsperf.com/looping-vs-regex 所示。所以想出了这个。

function checkArr(arr){
   var f = arr[0];
   if(f == 0) return false;
   for(var i = 0; i < arr.length; i++)
      if(arr[i] != f) return false;
   return true;
}

【讨论】:

  • 总有人建议 regex 模式适用于所有事物 :)
  • @somethinghere 当它使您的工作变得更容易且更具可读性时,为什么不呢?
  • 我是 Javascript 的新手,那么如何让这个脚本读取我的数组?我在哪里放置数组名称。
  • 我从来没有发现正则表达式“更具可读性”但更容易,当然。
  • @somethinghere - true,但对于这种特殊用途,其他选项要么循环数组,要么以某些非 obiovus 方式使用 reduce/filter。与其他选项相比,正则表达式实际上非常易读。
【解决方案3】:

试试这个:

var validate = function(arr) {
    var s = 0;
    var i = l = arr.length;
    while(i --)
        s += arr[i];
    return l === s || (2 * l) === s;
};

console.log(validate([0,0,0]));//false
console.log(validate([1,2,1]));//false
console.log(validate([2,2,2]));//true
console.log(validate([1,1,1]));//true
console.log(validate([2,2,2,2,2]));//true

【讨论】:

    【解决方案4】:

    另一种方法,没有循环或正则表达式:

    var arr = [1,2,1];
    arr.every(function (el) {
      return (el === 1 || el === 2) && el === arr[0];
    })
    

    或者,用.some 代替.every

    !arr.some(function (el) {
      return (el !== 1 && el !== 2) || el !== arr[0];
    })
    

    【讨论】:

      猜你喜欢
      • 2018-09-05
      • 2020-02-12
      • 2017-06-17
      • 1970-01-01
      • 1970-01-01
      • 2013-01-27
      • 2023-01-19
      • 2021-07-16
      相关资源
      最近更新 更多