条件:如果数组中的所有数字都是没有余数的除数

时间:2016-11-11 18:49:35

标签: javascript

我的问题是:

  

打印从低到高的所有数字。   如果打印的任何数字可以被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);

2 个答案:

答案 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条件的经典案例。