使用For循环处理数组时无法添加后缀". Fin"的问题排查与解决
循环生成列表时无法显示". Fin"后缀的问题修复
嗨,我来帮你搞定这个问题~首先来看你的原代码:
var test = [ "test1", "test2", "test3", "test4" ]; var text = ""; for (var i = 0; i < test.length; i++) { if (i == test.length) { text += test[i] + ". Fin"; } else { text += test[i] + "<br>"; } }
你提到这段代码的预期是生成带换行的列表,最后一项显示. Fin,但目前这个后缀始终不出现——你的推测没错,问题确实出在索引判断上!
错误原因分析
数组的索引是从0开始计数的,你的test数组长度是4,所以最后一个元素的索引是3(也就是test.length - 1)。而你的循环条件是i < test.length,i的取值范围是0、1、2、3,永远不会等于test.length(也就是4),所以那个带. Fin的分支永远不会执行。
修复后的循环代码
只需要把判断条件改成匹配最后一个索引即可:
var test = [ "test1", "test2", "test3", "test4" ]; var text = ""; for (var i = 0; i < test.length; i++) { if (i == test.length - 1) { // 匹配最后一个元素的索引 text += test[i] + ". Fin"; } else { text += test[i] + "<br>"; } }
更简洁的实现方式
正如你补充提到的,用Array.join()可以一行搞定,代码更简洁优雅:
var test = [ "test1", "test2", "test3", "test4" ]; // 最直观的写法:先连接所有元素,再给末尾加后缀 var text = test.join("<br>") + ". Fin"; // 如果担心原元素末尾有特殊内容,也可以用替换方式 var text = test.join("<br>").replace(/$/, ". Fin");
内容的提问来源于stack exchange,提问作者Sean
相关产品推荐
相关产品推荐

