Есть функция для нахождения следующего наименьшего числа.
function nextSmaller(n){
let forv=[...`${n}`].map(Number), rev=[...`${n}`].map(Number).reverse(),
idx1=rev.length-rev.findIndex((_,i,a)=>a[i-1]<a[i])-1,
idx2=forv.findIndex((v,i)=>Math.max(...forv.slice(idx1-forv.length+1)
.filter(x=>x<forv[idx1]))==v&&i>idx1);
[forv[idx1],forv[idx2]]=[forv[idx2],forv[idx1]];
let nn=Number([...forv.slice(0,idx1+1),...forv.slice(idx1-forv.length+1)
.sort((a,b)=>b-a)].join(''));
return rev.findIndex((_,i,a)=>a[i-1]<a[i])==-1||`${nn}`.length!=`${n}`.length?-1:nn}
console.log(nextSmaller(133232766512347)) //133232766475321
Справа находим индекс первой цифры, у которой есть меньшая цифра справа. Это idx1 //9
Потом находим индекс самой большой цифры, которая находится справа от idx1 и меньше нее. Это idx2 //13
Меняем местами эти цифры
Далее сортируем все цифры после индекса 9 в порядке убывания
Можно ли упростить нахождение idx2 ?