我的问题是:
打印从低到高的所有数字。 如果打印的任何数字可以被arr中的任何除数编号整除,请打印数字+单词¨one_match¨ 如果要打印的数字可被数组中的所有数字整除,则应输出数字+“all_match”。
在下面的函数中,我似乎能够为数组中的一个数字生成条件(通过遍历数组)和基本情况(没有一个是可以整除的)。我正在寻求中间案例的帮助(如果所有都可以整除),看起来内部循环不适合这个......另外一个for...in
并不真正与数组混淆......任何想法都要完成功能? (或者完全优化它)
function check(arr, low, high) {
for (var i = low; i <= high; i++) {
for (var j = 0; j < arr.length; j++)
if (i % arr[j] === 0)
console.log(i + ' one_match')
// trouble here -> else if (i % arr[j] && ???)
else
console.log(i);
}
};
check([2,3],1,7);
答案 0 :(得分:4)
您可以只计算匹配并查看内循环后的内容:
function check(arr, low, high) {
for (var i = low; i <= high; i++) {
var count = 0;
for (var j = 0; j < arr.length; j++) {
if (i % arr[j] === 0) {
count++;
}
}
if (count === arr.length) {
console.log(i + ' all_match');
} else if (count > 0) {
console.log(i + ' one_match');
} else {
console.log(i);
}
}
};
check([2,3],1,7);
function check(arr, low, high) {
for (var i = low; i <= high; i++) {
var count = arr.filter( d => !(i % d) ).length;
console.log(i + (count === arr.length ? ' all_match'
: count > 0 ? ' one_match'
: ''));
}
};
check([2,3],1,7);
答案 1 :(得分:1)
function check(arr, low, high) {
for (var i = low; i <= high; i++) {
var any = false, all = true;
for (var j = 0; j < arr.length; j++){
any = any || (i % arr[j] === 0);
all = all && (i % arr[j] === 0);
}
console.log(i+(all?' all_match':(any?' one_match':'')));
}
};
check([2,3],1,7);
它是OR与AND条件的经典案例。