Javascript 对于循环don';不要记录任何东西

Javascript 对于循环don';不要记录任何东西,javascript,math,Javascript,Math,我正在使用javaScript解决一个数学问题,以获取特定范围内的整数数据,并附带一个特殊条件 我使用了一个for循环来保持数字在范围(1到2000)内递增。另一个for循环检查整数的每个数字是否包含7,如果是,则将其记录到控制台 var i; for (i = 1; i < 2001; i++) { for (var index = 0; index <= i.length; index++) { if (i.substring(index, index +

我正在使用javaScript解决一个数学问题,以获取特定范围内的整数数据,并附带一个特殊条件

我使用了一个
for
循环来保持数字在范围(1到2000)内递增。另一个
for
循环检查整数的每个数字是否包含
7
,如果是,则将其记录到控制台

var i;
for (i = 1; i < 2001; i++) {
    for (var index = 0; index <= i.length; index++) {
        if (i.substring(index, index + 1) == 7) {
            console.log(i);
        }
    }
}

为什么我的代码没有记录适当的数字?

因为数字没有字符串属性。将其转换为字符串

for (var i = 1; i < 2001; ++i)
  for (var i_str = i.toString(), index = 0; index <= i_str.length; ++index)
    if (i_str.substring(index, index + 1) == 7)
      console.log(i);
for(变量i=1;i<2001;++i)

对于(var i_str=i.toString(),index=0;index,因为数字没有字符串属性。请将其转换为字符串

for (var i = 1; i < 2001; ++i)
  for (var i_str = i.toString(), index = 0; index <= i_str.length; ++index)
    if (i_str.substring(index, index + 1) == 7)
      console.log(i);
for(变量i=1;i<2001;++i)

对于(var i_str=i.toString(),index=0;index
i
是一个整数。
i.length
未定义。
length
是字符串和数组对象的属性,但不是整数。因此
for
循环比较
index
i
是一个整数。
i.length
未定义。
length
是字符串的属性nd数组对象,但不是整数。因此,
for
循环正在比较上面开始的
索引,
i
是一个数字,没有字符串属性。如果没有双循环,它的可读性更好。请改为使用
匹配

for (var i = 1; i < 2001; ++i) {
    if (i.toString().match(/7/g) != null) {
        console.log(i);
    }
}
for(变量i=1;i<2001;++i){
if(i.toString().match(/7/g)!=null){
控制台日志(i);
}
}

如上所述,
i
是一个数字,没有字符串属性。如果没有双循环,它的可读性更好。请改用
match

for (var i = 1; i < 2001; ++i) {
    if (i.toString().match(/7/g) != null) {
        console.log(i);
    }
}
for(变量i=1;i<2001;++i){
if(i.toString().match(/7/g)!=null){
控制台日志(i);
}
}

既然
i
是一个数字,它就没有长度既然
i
是一个数字,它就没有长度这只是答案的一半。另一半是
0实际上我错了,它被强迫为
NaN
,而不是
0
。这只是答案的一半。另一半是
0实际上我错了,它是强迫的d到
NaN
,而不是
0
+1表示没有大括号,解决了我的问题。顺便说一句,您可以直接使用
.length
toString()
来删除额外变量(
i_str
)的需要像这样:
index@scriptHero是的,但是您将在每次迭代时重新创建字符串。并且您也需要
子字符串的字符串。每次迭代重新创建字符串是否有复杂性?我不确定,但是对于2000次检查,性能应该不是一个太大的问题。@scriptHero
2000
表示数字最多有4个数字。这将是循环条件中的4个字符串转换,以及
if
语句中的4个字符串转换,因此每个数字总共有8个。因此我的答案将性能提高了8倍。这没什么特别的,但为什么不呢?+1表示没有大括号,并解决了我的问题。顺便说一句,您可以将
.length
直接用于
toString()
删除额外变量的需要(
i_str
)像这样:
index@scriptHero是的,但是您将在每次迭代时重新创建字符串。并且您也需要
子字符串的字符串。每次迭代重新创建字符串是否有复杂性?我不确定,但是对于2000次检查,性能应该不是一个太大的问题。@scriptHero
2000
表示数字最多有4个数字。循环条件中有4个字符串转换,if语句中有4个字符串转换,因此每个数字总共有8个。所以我的答案将性能提高了8倍。这没什么特别的,但为什么不呢?“它读起来更好…”当然,它看起来更好。但在性能方面它比Oriol的解决方案好吗?是的,这要快得多。(254毫秒vs 345毫秒).对于2k循环来说,这并不重要,但对于更大的数字/循环来说,这将是一个巨大的节约。我说,在需要优化之前,我会一直保持可读性。在这种情况下,这将永远不会发生,因为循环和数字是硬编码的。“它读起来更好…”当然,它看起来更好。但在性能方面它比Oriol的解决方案好吗?是的,这要快得多。(254毫秒vs 345毫秒)。对于2k循环来说,这并不重要,但对于更大的数字/循环来说,这将是一个巨大的节约。我说,在需要优化之前,我将保持可读性。在这种情况下,这将永远不会发生,因为循环和数字是硬编码的。