检查数组是不是有大于指定的数字
Posted
技术标签:
【中文标题】检查数组是不是有大于指定的数字【英文标题】:Checking whether array has a number bigger than specified检查数组是否有大于指定的数字 【发布时间】:2021-10-17 19:57:50 【问题描述】:我想写一个函数,它以数组为参数并返回有多少个数可以除以 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 循环使其有点意大利面?
【问题讨论】:
【参考方案1】:你可以先用 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));
【讨论】:
【参考方案2】:我稍微修改了你的函数,如果一个数字大于 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));
【讨论】:
【参考方案3】:some
数组方法可以解决问题:
array.some(value => return value > 111 )
将在其任何值大于 111 时返回 true。
您还可以通过使用array.every
和类似的回调来检查每个数组值是否符合特定条件:
array.every(value => return value <= 111 )
仅当数组中的每个值都小于或等于 111 时为真。
【讨论】:
【参考方案4】:最好的通用解决方案是下面的 oene 逻辑
过滤数组以获取大于111
的数字。如果此过滤器返回一个长度大于 1 的数组,则返回 0
Else 过滤数组中可被 12 整除的数字。无需检查数字是否小于 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);
【讨论】:
OP 声明如果数组的任何单个成员大于或等于 111,则该函数应返回 0。【参考方案5】:function isDivisble(array)
// at the beginning, do from here
if (array.some(p=>p > 111))
return 0;
// Rest xxxxxx
【讨论】:
这是不正确的。else
会将可被 12 整除的值的计数清零。以上是关于检查数组是不是有大于指定的数字的主要内容,如果未能解决你的问题,请参考以下文章
Python检查一个值是不是大于数组/向量中的下一个值[重复]