如何修改JS for循环代码为嵌套数组输出添加dataset标识前缀
问题描述
我现有以下运行正常的代码,目前希望给data变量内的每个嵌套数组添加区分标识。例如当前代码除自定义错误消息外的输出为:
... 5°C in 3 days... 10°C in 4 days... 4°C in 1 day... 5°C in 2 days... 6°C in 3 days
我希望实现的效果是,打印区分标识dataset与温度值所属嵌套数组的序号,预期输出如下:
dataset 2: ... 5°C in 3 days... 10°C in 4 days... dataset 4: ... 4°C in 1 day... 5°C in 2 days... 6°C in 3 days
我知道可以用其他方法简化str拼接逻辑,请问能否在现有代码基础上实现上述需求?非常感谢。
原有代码
const data = [[true, false], ["error", true, 5, 10, false], [true, false], [4, 5, 6], ["error, false"]]; const printForecast = function (input) { let str = ""; for (let i = 0; i < input.length; i++) { let count = 0; for (let b = 0; b < input[i].length; b++) { if (typeof input[i][b] !== "number") continue; str = `${str}... ${input[i][b]}°C in ${b + 1} day${(b + 1) === 1 ? "" : "s"}` count++; } if (count === 0) console.error(`No numbers in your nested array # ${i}! (message from me)`); } console.log(str); } printForecast(data);
第二次尝试代码
const data = [[true, false], ["error", true, 5, 10, false], [true, false], [4, 5, 6], ["error, false"]]; const printForecast = function (input) { let str = ""; for (let i = 0; i < input.length; i++) { let count = 0; for (let b = 0; b < input[i].length; b++) { if (typeof input[i][b] !== "number") continue; console.log(`dataset ${i + 1}: ${str}... ${input[i][b]}°C in ${b + 1} day${(b + 1) === 1 ? "" : "s"}`); count++; } if (count === 0) console.error(`No numbers in your nested array # ${i}! (message from me)`); } } printForecast(data);
解决方案
第二次尝试的错误有两点:一是把console.log放在了内层循环,导致每读取到一个温度值就会打印一次;二是全局共用了同一个str变量,会把之前嵌套数组的内容也带进去。
只需要在原有代码基础上做少量调整即可:把str变量的声明放到外层循环内部,每个嵌套数组单独生成自己的温度字符串,处理完当前嵌套数组的所有元素后,判断如果存在数值就拼接标识打印即可。
修改后代码如下:
const data = [[true, false], ["error", true, 5, 10, false], [true, false], [4, 5, 6], ["error, false"]]; const printForecast = function (input) { for (let i = 0; i < input.length; i++) { let count = 0; // 每个嵌套数组单独用一个str存储当前组的温度字符串 let str = ""; for (let b = 0; b < input[i].length; b++) { if (typeof input[i][b] !== "number") continue; str = `${str}... ${input[i][b]}°C in ${b + 1} day${(b + 1) === 1 ? "" : "s"}` count++; } if (count === 0) { console.error(`No numbers in your nested array # ${i}! (message from me)`); } else { // 当前数组有数值,拼接标识打印 console.log(`dataset ${i + 1}: ${str}`); } } } printForecast(data);
运行后输出和要求的预期完全一致。
内容的提问来源于stack exchange,提问作者chessplayer
相关产品推荐
相关产品推荐

