Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.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,我正在尝试创建一个函数,它包含3个参数–start、end和bannedNumber。它应该从头到尾打印所有数字,但跳过所有被禁止数字的倍数以及任何包含被禁止数字的数字 这是我的密码: <script> var arr = []; var str = ""; var newarr = []; var str1 function Zumbaniaa(a, b, c) { for (var i = a; i < b; i++) { arr.

我正在尝试创建一个函数,它包含3个参数–start、end和bannedNumber。它应该从头到尾打印所有数字,但跳过所有被禁止数字的倍数以及任何包含被禁止数字的数字

这是我的密码:

 <script>
  var arr = [];
  var str = "";
  var newarr = [];
  var str1
  function Zumbaniaa(a, b, c) {
    for (var i = a; i < b; i++) {
      arr.push(i);
    }

    for (var j = 0; j < arr.length; j++) {
      if (arr[j] % c == 0) {
        arr.splice(j, 1);
      }
    }

    for (var m = 0; m < arr.length; m++) {
      str = arr[m].toString();
      str1=str.split("");
      if (str1.indexOf(c) >=0) {
        arr.splice(m, 1);
      }
    }
    return arr
  }


  document.write(Zumbaniaa(1, 90, 8))
  console.log(str1)
</script>

var-arr=[];
var str=“”;
var newarr=[];
变量str1
祖姆巴尼亚函数(a、b、c){
对于(变量i=a;i=0){
arr.拼接(m,1);
}
}
返回arr
}
文件编写(Zumbaniaa(1,90,8))
console.log(str1)

由于某种原因,第三个循环不起作用。它根本不是用8过滤数字

最简单的方法是不首先将禁止的值推送到数组中。因此,在按下之前,请检查要按下的数字是否是禁止数字的倍数,或者是否包含禁止数字:

功能过滤范围(开始、结束、禁止){
设nums=[];

对于(让i=start;i删除此行:
str1=str.split(“”;
)。它导致
indexOf()
失败。改为调用
str.indexOf(c)
。然后反转最后一个循环

发生的情况:
indexOf()
适用于字符串和数组。在字符串上使用时,搜索的字符总是首先解析为字符串,因为字符串只包含字符串。在数组上使用时,搜索的字符根本不解析,因为数组可以包含字符串、数字等

var arr=[];
var str=“”;
var newarr=[];
变量str1
祖姆巴尼亚函数(a、b、c){
对于(变量i=a;i0;m--){
str=arr[m].toString();
//str1=str.split(“”);
如果(str.indexOf(c)>=0){
arr.拼接(m,1);
}
}
返回arr
}
祖姆巴尼亚(1,90,8);

控制台日志(arr)
变量名,如
a
b
c
arr
str
str1
newarr
Zumbaniaa
,不要告诉我这个程序应该如何工作,或者这些数据是什么。我建议写描述性变量名,并显示预期/实际输入/output.函数的所有状态数据都是全局初始化的,这有什么原因吗?这会破坏封装,使函数在没有明显原因的情况下变为非幂等函数。谢谢。另外,在向前迭代时调用列表上的
splice
,将导致跳过索引,因为
arr.length
会随着
splice
call,每次调用时抛出一个
i
。如果您计划在循环中使用
splice
,请向后迭代。更好的是,使用
Array#filter
。您好,但这样仍然可以打印82,84,86,89?@Nick您可以使用
Array.from(Array(90).keys()).filter()进一步减少此操作
function@symlink您是对的(虽然这将给出一个从0到89的数组,而不是1到90的数组,并且不允许使用
start
变量,仍然可以很容易地修改以处理该问题)-但是基于问题中的代码,我希望尽可能地保留答案。