JS循环:for的多种玩法
本帖最后由 马黑黑 于 2022-6-22 20:17 编辑 <br /><br /><p>有一个奇葩的问题,就是,用最少的语句,将一个已知数组按三位数输出,不足三位数的前面补零。数组举例如下(不是原题提供的数组,但这不重要):<br><br></p><p>let arr = ;<br><br></p>
<p>我最先想到的是用 for of 循环语句,然后想到 for in、forEach 和 map。我先用 for of 做题:<br><br></p>
<p><span style="color: blue">for</span>(x of arr) console.log(x.<font color="#8b0000">toString</font>().<font color="#8b0000">padStart</font>(3,<span style="color: magenta">'0'</span>));<br><br></p>
<p>这里有三个知识点:</p><p><br></p><p>其一,for of 循环语句,它针对数组元素,直接遍历数组元素的内容。例如,我们读出 arr 每一个元素的内容,可以这样:</p><p><br></p><p>for(x of arr) {</p><p> console.log(x);</p><p>}</p><p><br></p><p>这将把数组 arr 每一个元素打印出来。</p><p><br></p><p>其二,toString() 内置函数,将变量转换成字符串。因为题意是要求输出数组元素,而数组元素是整数,需要将其一一转为字符串,后续的补零操作才会成功。</p><p><br></p><p>其三,padStart() 内置函数,这是格式化字符串的函数,给字符串的前面加字符,参数有两个,参数一表示最多补到多少位,位数足的不补,参数二表示用什么补。如果补在后面,则用函数 padEnd() ,参数一样。</p><p><br></p><p>for of 针对数组,且直接遍历的是数组的元素自身。而——</p><p><br></p><p>for in 循环语句则针对对象,且遍历的是对象元素的索引。由于数组也可以视为对象,所以 for in 也能解答题目:</p><p><br></p><p><font color="#0000ff">for</font>(x <font color="#0000ff">in</font> arr) console.log(arr.<font color="#8b0000">toString</font>().<font color="#8b0000">padStart</font>(3,'0'));</p><p><br></p><p>for in 是遍历对象(数组)的索引,所以,读出数组元素内容方法是 arr ,而不是 for of 的 x 那么直接。</p><p><br></p><p>其实还有 forEach 也是可以一句答题的:</p><p><br></p><p>arr.forEach((x) => console.log(x.toString().padStart(3,'0')));</p><p><br></p><p>不同的是,用 forEach 要构造一个函数。它其实是标准 for 循环语句的另一种表现方法,但 forEach 是一个独立的函数。</p><p><br></p><p>最后用 map 构建一个新的数组,然后输出新的数组,也可以一行完成:</p><p><br></p><p>console.log(arr.map((x) => x.toString().padStart(3,'0')));</p><p><br></p><p>map 是对已有数组的映射,但不是简单映射,是以对原数组元素执行函数操作后的结果而构建的全新数组,对原数组不做任何改动。</p><p><br></p><p>不知不觉就有了四种解题方法,估计还有更多,而且会比我想到的更精彩。</p><p><br></p><p><br></p> 黑黑你一直在论坛?
我刚才又不能进来了 小辣椒 发表于 2022-6-22 21:02
黑黑你一直在论坛?
我刚才又不能进来了
我挂着,但不一定都刷新,没有感觉到论坛不能访问的情况 马黑黑 发表于 2022-6-22 21:04
我挂着,但不一定都刷新,没有感觉到论坛不能访问的情况
队长到现在都不能进来 不过我一直手机,今天还没有回家,有点迟了 小辣椒 发表于 2022-6-22 21:11
不过我一直手机,今天还没有回家,有点迟了
手机是说不清楚的,特别是这个时候,基站负担都会很重 小辣椒 发表于 2022-6-22 21:10
队长到现在都不能进来
如果会,重启家里的路由看看,不会的就算了 新的仙术出笼了{:4_189:} 看得发晕,JS我是弄不懂了{:4_173:} 黑黑太厉害了,能找到四种之多。而且把四种放在一起比较,更容易看出它们之间的构成方式。
看了一下,四种都要用到将变量转换成字符串的toString() 内置函数和格式化字符串的padStart() 内置函数,而每种方法针对的对象和实现方式不同。 通过比较,貌似其他三种都是针对数组,只有for in是针对对象的?因为之看到它有arr,其他的都直接是x 红影 发表于 2022-6-23 09:39
通过比较,貌似其他三种都是针对数组,只有for in是针对对象的?因为之看到它有arr,其他的都直接是x
对象和数组结构其实差不多的
马黑黑 发表于 2022-6-23 12:18
对象和数组结构其实差不多的
哦哦,那等于四种针对的都差不多。 红影 发表于 2022-6-23 16:19
哦哦,那等于四种针对的都差不多。
都可以,只是有些细节要注意 马黑黑 发表于 2022-6-23 19:54
都可以,只是有些细节要注意
嗯嗯,这四种的语句不同,虽然都能达到目的。 红影 发表于 2022-6-24 13:59
嗯嗯,这四种的语句不同,虽然都能达到目的。
具体情况还有具体分析,总是有区别的
页:
[1]