Вот подробный способ, который пытается разбить проблему на несколько небольших проблем и решить эти проблемы с помощью небольших функций.По сути, мы:
- Конвертируем строку в массив
- Разбиваем массив на куски по три или как можно ближе к трем
- Отфильтровываем куски, которыене три длинных числа
- Преобразование фрагментов 3 'числовых' строк в одно число
- Пройдите по каждому числу, сохраняя запись самого большого
- ВозвращаетНаибольшее
Если вам нужно что-то быстрое, то это не самое эффективное решение, и вам лучше чем-то другим.Но если вам интересно иметь решение, которое построено из небольших, компонуемых кусков, то это может быть полезно для вас.
const splitIntoAllChunks = size => array => Object.values(
array
.reduce((prev, _, i) => ({
...prev,
[i]: array.slice(i, i + size),
}), {})
);
const splitIntoThrees = splitIntoAllChunks(3);
const isLength = length => array => array.length === length;
const stringArrayToNumber = array => Number(array.join(''));
const getMax = (champ, challenger) => challenger > champ ? challenger : champ;
const example = "184727158129123"
const result = splitIntoThrees(example.split(''))
.filter(isLength(3))
.map(stringArrayToNumber)
.reduce(getMax, 0);
console.dir(result);
Если вы хотите пойти с чем-то более похожим на ваше оригинальное решение, то вы можете немного исправить это с помощью чего-то вроде:
const testData = "1234596789"
function largestThreeDigitNum(numString){
// this could be passed into the function instead, that way
// the same code could be used for numbers of different sizes
let numberSize = 3;
// we only care about the largest three digit number at any given time
let largestThreeNumber = 0;
// I've changed this to i++ as it's a little more conventional that way
// I've also setup the loop to stop as soon as it can
for (let i = 0; i < numString.length - (numberSize - 1); i++){
// find the number for comparison
const thisNumber = Number(numString.slice(i, i + 3))
// if it's the biggest number, keep track of it
if(thisNumber > largestThreeNumber){
largestThreeNumber = thisNumber;
}
}
return largestThreeNumber;
}
console.dir(largestThreeDigitNum(testData))