【问题标题】:Javascript: Forloop Difference between i++ and (i+1)Javascript:i++ 和 (i+1) 之间的 For 循环区别
【发布时间】:2015-06-22 07:43:40
【问题描述】:

我正在构建一个 javascript for 循环,我想将数组的值与数组中的下一个值进行比较。

如果两个值不相等,我想返回true,否则我想返回false。

在下面的代码中,我传递了字符串“aba”,将其拆分并排序到

sortedLetters = ["a", "a", "b"]

然而,当我将 sortedLetters[0] ("a") 与 sortedLetters[1] 进行比较时

function isIsogram(str){

    // split each letter into an array and sort
    sortedLetters = str.split("").sort();

    console.log(sortedLetters[0]); // is "a"
    console.log(sortedLetters[1]); // should be "a"

    // iterate through the array and see if the next array is equal to the current
    // if unequal, return true
    for( i = 0; i < sortedLetters.length; i++ ) {
        if(sortedLetters[i] !== sortedLetters[(i+1)]) return true;
    }
    // for "a" and "a", it should return false

    return false;

};

document.write(isIsogram("aba"));

但是,为什么下面的 if 语句可以工作,而上面的代码却不行?

if(sortedLetters[i] !== sortedLetters[i++]) return true;

【问题讨论】:

    标签: javascript loops for-loop


    【解决方案1】:

    i++ 使用的是后增量,因此表达式 i++ 的值是变量 i 在增量之前的值。这段代码:

    if(sortedLetters[i] !== sortedLetters[i++]) return true;
    

    做同样的事情:

    if(sortedLetters[i] !== sortedLetters[i]) return true;
    i = i + 1;
    

    由于x !== x 对于x 的任何稳定值始终为假,代码的作用与以下相同:

    if(false) return true;
    i = i + 1;
    

    您可以使用预递增版本++i,但如果您在语句中递增变量,则也不应在循环中递增它:

    for (i = 0; i < sortedLetters.length; ) {
      if (sortedLetters[i] !== sortedLetters[++i]) return true;
    }
    

    【讨论】:

      【解决方案2】:

      很简单,这个表达式中的索引是一样的:

      if(sortedLetters[i] !== sortedLetters[i++]) return true;
      

      例如,如果 for 循环计数器为 3,它将评估 sortedLetters[3] !== sortedLetters[3]递增值之前。

      在你的 for 循环中使用 i++ 也会使你的计数器加倍。

      【讨论】:

        猜你喜欢
        • 2011-01-24
        • 1970-01-01
        • 1970-01-01
        • 2017-05-17
        • 1970-01-01
        • 1970-01-01
        • 2022-08-11
        • 2019-01-11
        相关资源
        最近更新 更多