Javascript 跳过数组中包含特定数字的数字
我正在尝试创建一个函数,它包含3个参数–start、end和bannedNumber。它应该从头到尾打印所有数字,但跳过所有被禁止数字的倍数以及任何包含被禁止数字的数字 这是我的密码: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.
<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
变量,仍然可以很容易地修改以处理该问题)-但是基于问题中的代码,我希望尽可能地保留答案。