Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 数组函数,用于生成具有数字子集范围的数组_Javascript_Arrays - Fatal编程技术网

Javascript 数组函数,用于生成具有数字子集范围的数组

Javascript 数组函数,用于生成具有数字子集范围的数组,javascript,arrays,Javascript,Arrays,我试图创建一个函数,该函数构建一个数组,数组的大小由函数参数设置,并根据余数是否为零包含if条件。数组中的最后一个数字不应大于参数。这是我到目前为止想到的-- 我发现问题在于将限制器设置为array.length,这会最大化数组中的项数,但我不知道还需要调用什么来确保数组中的最后一个数字不高于函数调用指定的“num”参数。有什么想法吗?嗯。看起来这是一个非常简单的解决方案。将限制器从“array.length”更改为“num”,效果很好 function justThreesUpTo(num)

我试图创建一个函数,该函数构建一个数组,数组的大小由函数参数设置,并根据余数是否为零包含if条件。数组中的最后一个数字不应大于参数。这是我到目前为止想到的--


我发现问题在于将限制器设置为array.length,这会最大化数组中的项数,但我不知道还需要调用什么来确保数组中的最后一个数字不高于函数调用指定的“num”参数。有什么想法吗?

嗯。看起来这是一个非常简单的解决方案。将限制器从“array.length”更改为“num”,效果很好

function justThreesUpTo(num) {
var array = [];
array.length = num; 
for (i = 1; i < num; i++) {
  if(i % 3 === 0){
      array.push(i);
  }
  else i;
  }
  array.splice(0, num);
  return array;
}
函数justThreesUpTo(num){
var数组=[];
array.length=num;
对于(i=1;i

没关系

在循环数组(或其索引,这是您使用
i
)时修改数组会导致混淆。从空数组开始,改为与
num
进行比较:

function justThreesUpTo(num) {
    var array = [];

    for (var i = 1; i < num; i++) {
        if (i % 3 === 0) {
            array.push(i);
        }
    }

    return array;
}
函数justThreesUpTo(num){
var数组=[];
对于(变量i=1;i
现在,您可以通过每次向上移动适当的金额来完全优化签出

function justThreesUpTo(num) {
    var array = [];

    for (var i = 3; i < num; i += 3) {
        array.push(i);
    }

    return array;
}
函数justThreesUpTo(num){
var数组=[];
对于(变量i=3;i

(在您的原始代码中,由
array.length=num;
创建的第一个
num
孔未被使用并被拼接掉,而
否则i
什么也不做。)

在填充数组之前将数组的长度设置为某个值并不是一个好主意-最好只是迭代
num
本身。比如说

for (var i = 1; i < num; i++) {
  // push to array if i % 3 === 0

您可以尝试使用一个简单的
while
循环

函数justThreesUpTo(num){
var数组=[];
var i=0;
while(iconsole.log(justThreesUpTo(20))使用
使用
i+=3
中,而
循环:

函数justThreesUpTo(num){
var数组=[];
var i=0;

while(i您可以使用
map
方法和扩展语法来编写干净的解决方案

函数justThreesUpTo(num){
返回[…数组(数学层(num/3)).keys()].map(((i,i)=>(i+1)*3);
}

控制台日志(justThreesUpTo(20));
函数的用途是什么?其他部分在做什么?@Ry-非常正确。编辑了答案。谢谢你的建议。还有一种方法比我最初尝试的更好。同样容易使用两个参数,这也是我尝试结束的地方。请参阅之前评论中的repl.it。好多了。我很快就意识到了这一点ter这不是一个很好的解决方案,但也希望函数为除法器(2、3等)和限制器获取输入。因此,在这种情况下,(num,div)并将长度常量中的“/3”更改为“/div”-似乎工作正常。也更好。这是一种非常有用的概念化方法。还可以将+=数量转换为一个参数,并将输入指定的步骤返回到限制器//console.log(moreJustDivsUpTo(60,5));
function justThreesUpTo(num) {
    var array = [];

    for (var i = 3; i < num; i += 3) {
        array.push(i);
    }

    return array;
}
for (var i = 1; i < num; i++) {
  // push to array if i % 3 === 0