【问题标题】:Javascript exercise that looks fine to me but its not working对我来说看起来不错但不起作用的 Javascript 练习
【发布时间】:2018-11-05 14:25:55
【问题描述】:

这个练习是关于识别数组中的所有元素是否相同,如果它们相同则返回 true,否则返回 false。下面是代码和我编写代码背后的逻辑。

function isUniform(array){
  for(var i = array.length - 1; i>=0; i--){
    if(array[i] !== array[i-1]){
        return false;
    }
  }
  return true;
}

基本上,我想从数组末尾的最后一个元素开始,检查它是否与倒数第二个元素相等。如果它们相等,循环将从“i”变量中减去 1,然后“if 语句”将再次运行。当 i 达到 -1 时循环将停止,这就是检查每个数组元素并且循环应该结束并返回 true 的点。我在做什么/想错了什么?

谢谢!

【问题讨论】:

  • 在最后一次迭代中,i 将为零 ...
  • 当然你必须训练逻辑,但查一下只是为了知道该语言可以做什么 XD
  • i>=0 更改为i>0
  • @Pointy, undefined no?
  • typeof array.find(element => element !== array[0]) === 'undefined' 可能会更简单

标签: javascript arrays


【解决方案1】:

i 变为 0 时,您将 arr[0]arr[-1] 进行比较,这是错误的。你的检查条件应该是i > 0

【讨论】:

    【解决方案2】:

    最后一次运行时,i 为 0,因此您将 array[0] 与 array[-1] 进行比较,这是不正确的。您的布尔条件应该是 i > 0,这样您就可以避免这个问题:

    function isUniform(array){
      for(var i = array.length - 1; i > 0; i--){
        if(array[i] !== array[i-1]){
          return false;
        }
      }
      return true;
    }
    

    【讨论】:

      【解决方案3】:

      您可以使用every 方法来简化solution

      const allEqual = arr => arr.every(x => arr[0] == x));
      

      【讨论】:

        【解决方案4】:

        您可以使用ArrayUtils 创建一个方法来检查您的输入数组。

        public boolean contains(final int[] array, final int key) {     
            return ArrayUtils.contains(array, key);
        }
        

        旅行所以无法调试,但i 的最后一次迭代将在您的代码中为 0 并停止。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-12-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-03-05
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多