设置为严格相等的变量返回true,但函数返回的数字小于等于变量的数字吗?

时间:2018-08-07 15:25:51

标签: javascript for-loop

观察以下功能。

function PermutationStep(num) { 
      var max = Number(String(num).split('').sort((a,b)=>b-a).join(''))
      console.log(max); // 9431
      for(var i = num; i < max; i++){
        let perm = Number(String(i).split('').sort((a,b) => b-a).join('')) === max;
        console.log(perm);
        if(i > num && perm) {  // I don't understand why this returns 9314 as opposed to the max since perm is set equal max.
          return i;
        }
      }
      return -1; 
    }

    console.log(PermutationStep(9143));

它的设计目的是要获取一个数字,然后找到该数字的下一个排列。例如。 9143应该返回9314。

除了一行,我理解代码。 if语句。如果最大值为=== 9431,为什么函数返回9314作为排列?

2 个答案:

答案 0 :(得分:0)

因为这一行:

let perm = Number(String(i).split('').sort((a,b) => b-a).join('')) === max;

...采用9143(i)的数字并将其重新排列为高位在先,然后转换回数字。该数字为9431,即max,因此,由于9431 === 9431true,因此perm为true。然后,在if中满足i > num9314 > 9143true)并且permtrue的情况下,满足条件。 / p>

答案 1 :(得分:-1)

该函数确定最大值,然后在最大值之前查找下一个。

代码

let perm = Number(String(i).split('').sort((a,b)=>b-a).join(''))===max;

正在比较 Number(String(i).split('')。sort((a,b)=> ba).join('')) max ,而 perm 变量将为true或false。