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);