检查数组中是否有大于指定的数字



我想写一个函数,以array作为参数并返回有多少数字可以被12整除。然而,如果数组中的数字大于111,那么它应该返回0;我这样写:

function isDivisble(array) {
let numberOfNum = 0;
for(let i=0; i < array.length; i++) {
if(array[i] % 12 == 0 && array[i] < 111) {
numberOfNum = numberOfNum + 1 ;
} else {
numberofNum = 0;
}
}
return console.log(numberOfNum);
}
let test = [12, 24, 36, 44, 55, 255];

isDivisble(test)

我意识到这段代码单独检查当前数字是否可除且不高于111,而不是全局数组是否有高于111的数字,但我不明白如何进行一般数组检查。用if语句写for循环然后在if语句里再写一个for循环是不是有点像意大利面?

您可以先使用some检查是否有大于111的元素。然后你可以使用过滤器来得到能被12整除的元素。这样的:

const isDivisible = (arr) => {
if (arr.some((e) => e > 111)) return 0;
return arr.filter((e) => e % 12 === 0).length;
};
const test = [12, 24, 36, 44, 55, 48];
console.log(isDivisible(test));

我稍微修改了你的函数,如果一个数字大于111,则返回0,否则检查它是否能被12整除

function isDivisble(array) {
let count = 0;
for(let i=0; i<array.length; i++){
if(array[i] > 111){
return 0;
}else{
if(array[i] % 12 === 0){
count++
}
}
}
return count;
}

let test = [12, 24, 36, 44, 55, 255];
console.log(isDivisble(test));

some数组方法可以做到这一点:

array.some(value => { return value > 111 })将返回true,如果它的任何一个值大于111。

您还可以使用array.every和类似的回调来检查每个数组值是否符合特定条件:

array.every(value => { return value <= 111 })仅当数组中的每个值都小于或等于111时为真。

最佳通用解决方案如下所示

  • 筛选数组中大于111的数字。如果此过滤器返回长度大于1的数组,则返回0
  • Else过滤数组中能被12整除的数字。不需要检查number是否小于111。因为如果这个数字大于111,函数可能已经返回了0
  • 返回上述过滤器的长度。

工作小提琴

function isDivisbleGeneric(arr) {
const numberGreaterThanLimit = arr.filter((node) => node > 111);
let returnCount;
if(numberGreaterThanLimit.length > 0) {
returnCount = 0;
} else {
const divisibleBy12 = arr.filter((node) => node %12 === 0);
returnCount = divisibleBy12.length;
}
return returnCount;
}
let test = [12, 24, 36, 44, 55, 255];
const count = isDivisbleGeneric(test);
console.log(count);

单行解决方案

const isDivisbleOneLine = (arr) => arr.filter((node) => node > 111).length > 0 ? 0 : arr.filter((node) => node %12 === 0).length;
let test = [12, 24, 36, 44, 55, 255];
const count = isDivisbleOneLine(test);
console.log(count);

function isDivisble(array) {
// at the beginning, do from here
if (array.some(p=>p > 111)) {
return 0;
}
// Rest xxxxxx
}

最新更新