在我的函数中,我被赋予了一串数字作为参数。我需要找到最大的 3 位连续数字并返回它。
function largestThreeDigitNum(numString){
let largestNumber = 0;
let largestThreeNumber = 0;
for(let i= 0; i<numString.length; ++i){
if(numString[i] === largestNumber){
largestThreeNumber = largestNumber++
}
}
return largestThreeNumber;
}
这是一个返回 3 个最大连续数字的小脚本,希望对您有所帮助
function largestThreeDigitNum(numString) {
var numbers = [];
// Loop to fill an array with all 3 consecutive numbers
for (var i = 0; i < numString.length - 2; i++) {
numbers.push(numString.slice(i, i + 3));
}
numbers.sort() // sort the array from the smallest to the biggest
return numbers[numbers.length - 1] // return the last item of the array, the biggest one
}
console.log(largestThreeDigitNum("693759936") )
好的,让我们假设您的输入字符串类似于"123 465 789"。您可以将其拆分为空格,仅保留 3 位数字,对其进行排序,取最后三位。
largestThreeDigitNum = numString => numString
.split(" ") // split it over spaces
.filter(n => n.length === 3) // keep only 3 digit numbers
.sort()
.slice(-3) // take the last three
console.log( largestThreeDigitNum("56 456 321 78 987 123 741 2 96 41 58 654") )
这是一种冗长的方法,它试图将问题分解为几个小问题,并用小函数解决这些问题。本质上,我们:
- 将字符串转换为数组
- 将数组拆分为三个块,或尽可能接近三个
- 过滤掉长度不是三个数字的块
- 将 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))
你可以使用一个临时数组并检查值。
var array = [101, 102, 103, 307, 308, 309, 211, 215, 227, 249, 479, 480, 481, 901, 902, 635, 636, 637],
temp = [],
largest = array.reduce((r, b, i, { [i - 1]: a }) => {
if (a !== b - 1) {
temp = [b];
return r;
}
temp.push(b);
if (temp.length > 3) temp.shift();
if (temp.length === 3 && (!r || r[0] < temp[0])) return temp.slice();
return r;
}, undefined);
console.log(largest);