【问题标题】:JavaScript: nested For Loops don't workJavaScript:嵌套的 For 循环不起作用
【发布时间】:2018-03-02 15:01:30
【问题描述】:

所以我有这个任务来编写isUniform() 函数,它接受一个数组作为参数,如果数组中的所有元素都相同,则返回 true。

这是我写的:

var array = [1, 2, 3, 4];

isUniform(array);
console.log("- - - - - ")
isUniform([1, 1, 1, 1]);

function isUniform(array) {
   var counter = 0;

   for (var i = 0; i < array.length - 1; i++) {
      for (var j = i + 1; j < array.length; j++) {
         if (array[i] !== array[j]) {
            counter++;
         }
      }
   }

   if (counter === 0) {
    return true;
   }

   return false;
}

问题是,它只打印出- - - - -。为什么?

编辑: 好的,我想当你退回一些东西时,它会自动打印出来。 但是还有另一个问题——为什么在第一个例子中返回 true?

好的,谢谢您的提示。没错,我没有考虑效率。改成这样:

function isUniform(array) {

   for (var i = 0; i < array.length - 1; i++) {
       if (array[i] !== array[i+1]) {
           return false;
       }
   }

   return true;
}

现在可以完美运行了,谢谢。

【问题讨论】:

  • isUniform 不会打印,您也不会对其结果做任何事情。
  • 你必须console.log(isUniform(array));
  • “嵌套 for 循环”绝对有效。 100%。
  • 顺便说一句——你不可能选择更低效的方法来解决这个问题。您检查每个元素 2 次。你可以循环一次,然后检查它旁边的元素,然后提前 1 完成。
  • 你希望它输出什么?你甚至没有说出你想要做什么

标签: javascript arrays for-loop nested nested-loops


【解决方案1】:

你可以使用 ES6 Set 并检查它的大小。

const isUniform = arr => new Set(arr).size == 1;

console.log(isUniform([1, 1, 1, 1]))
console.log(isUniform([1, 2, 3, 4]))

【讨论】:

  • set 知道大小。
  • 我很困惑,是什么让你认为 OP 试图输出函数的结果?
【解决方案2】:

你需要显示函数的结果。

如果不相等,您可以只检查每个元素与第一个结束提前退出。

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

console.log(isUniform([1, 2, 3, 4]));
console.log(isUniform([1, 1, 1, 1]));

【讨论】:

    【解决方案3】:

    我知道它已被回答,但您也可以通过以下方式使用every

    function isUniform(arr){
        return arr.every(function(x){return x === arr[0]});
    }
    
    console.log(isUniform([1, 2, 3, 4, 5]));
    console.log(isUniform([1, 1, 1, 1, 1]));

    【讨论】:

    • 到目前为止,我还没有来“每个”,但我一定会查一下,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-03
    • 2016-10-10
    • 1970-01-01
    • 1970-01-01
    • 2019-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多