请马上登录,朋友们都在花潮里等着你哦:)
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 马黑黑 于 2022-6-22 20:17 编辑
有一个奇葩的问题,就是,用最少的语句,将一个已知数组按三位数输出,不足三位数的前面补零。数组举例如下(不是原题提供的数组,但这不重要):
let arr = [1,26,33,156,77,8,17,999,47];
我最先想到的是用 for of 循环语句,然后想到 for in、forEach 和 map。我先用 for of 做题:
for(x of arr) console.log(x.toString().padStart(3,'0'));
这里有三个知识点:
其一,for of 循环语句,它针对数组元素,直接遍历数组元素的内容。例如,我们读出 arr 每一个元素的内容,可以这样:
for(x of arr) { console.log(x); }
这将把数组 arr 每一个元素打印出来。
其二,toString() 内置函数,将变量转换成字符串。因为题意是要求输出数组元素,而数组元素是整数,需要将其一一转为字符串,后续的补零操作才会成功。
其三,padStart() 内置函数,这是格式化字符串的函数,给字符串的前面加字符,参数有两个,参数一表示最多补到多少位,位数足的不补,参数二表示用什么补。如果补在后面,则用函数 padEnd() ,参数一样。
for of 针对数组,且直接遍历的是数组的元素自身。而——
for in 循环语句则针对对象,且遍历的是对象元素的索引。由于数组也可以视为对象,所以 for in 也能解答题目:
for(x in arr) console.log(arr[x].toString().padStart(3,'0'));
for in 是遍历对象(数组)的索引,所以,读出数组元素内容方法是 arr[x] ,而不是 for of 的 x 那么直接。
其实还有 forEach 也是可以一句答题的:
arr.forEach((x) => console.log(x.toString().padStart(3,'0')));
不同的是,用 forEach 要构造一个函数。它其实是标准 for 循环语句的另一种表现方法,但 forEach 是一个独立的函数。
最后用 map 构建一个新的数组,然后输出新的数组,也可以一行完成:
console.log(arr.map((x) => x.toString().padStart(3,'0')));
map 是对已有数组的映射,但不是简单映射,是以对原数组元素执行函数操作后的结果而构建的全新数组,对原数组不做任何改动。
不知不觉就有了四种解题方法,估计还有更多,而且会比我想到的更精彩。
|