next higher number

by ellhn

JavaScript

function swap(number){
  let elemIndex, nextElemIndex;
  let digits = (""+number).split("");
  
  for (let i=digits.length-2; i>=0; i--){
    if (digits[i]<digits[i+1]){
      elemIndex=i;
      break;
    }
  }
  
  if (elemIndex){
    let tempDigits=digits.slice(elemIndex+1);
    tempDigits.sort();
    for (let i=0; i<=tempDigits.length-1; i++){
      if (tempDigits[i]>digits[elemIndex]){
        nextElemIndex=i;
        break;
      }
    }
  
    digits.splice(elemIndex,0,tempDigits[nextElemIndex]); 
    tempDigits.splice(nextElemIndex,1);
    tempDigits.push(digits[elemIndex+1]);
    tempDigits.sort();
    digits.length=elemIndex+1;

    let finalDigits=digits.concat(tempDigits);
    console.log (finalDigits.join(""));
  }
  else{
    digits.sort();
    //console.log(digits);
    let firstNonZero = digits.findIndex(elem => elem != 0);
    let zeroDigits=digits.slice(0,firstNonZero);
    //console.log(zeroDigits);
    let firstDigits = digits.slice(0,firstNonZero);
    //console.log("here",firstDigits);
    let secondDigits = digits.slice(firstNonZero);
    //console.log("here",secondDigits);
    secondDigits.splice(1,0,0);
    let finalDigits=secondDigits.concat(firstDigits);
    console.log (parseInt(finalDigits.join("")));
  }
  
}

swap(1234598621);