javascript - 重构循环
问题描述
我有一组两个 for 循环。这些元素被一组初始元素偏移numberOfInputs
。我想将这些重构为一个循环。每个数组都有相同数量的元素。它们都是由相同的numberOfInputs
。
我已经弄清楚了如何通过在必要时减去偏移量并在必要时增加 1 来手动执行此操作。
// number of inputs start out as 2.
var numberOfInputs = 2;
// initialize blank html
html = '';
//create key inputs
for (let i = numberOfInputs; i < elArray.length+numberOfInputs; i++){
html += '<div id="s';
id = (1+i-numberOfInputs);
html += id;
html +='\" class=\"draggyBox-small\">';
html += elArray[i-numberOfInputs];
html +='</div>\n';
}
//create description inputs
html += '<table id=\"tablestyle\">'
for (let i = numberOfInputs; i < dlArray.length+numberOfInputs; i++){
html += '<td id="row';
id = (1+i-numberOfInputs);
html += id;
html +='">\n';
html += '\t\t<div id=\"t';
html += id;
html +='" class=\"ltarget\"></div>\n \t</td >\n \t<td id=\"d2\">'
html +=dlArray[i-numberOfInputs];
html +='</td >\n </tr>\n';
}
html += '</table>';
解决方案
有两个for
针对同一个索引运行的循环很好。它不会显着改变性能并且更容易理解。但是,可以进行其他重构以提高性能和可读性。
注意:您总是在减去numberOfInputs
,因此没有理由一开始就添加它。
// assuming `html` and `elArray` had been set earlier
// and that `elArray` is an array of strings
let top = elArray.map((v,i) =>
`<div id="s${i+1}" class="draggyBox-small">${v}</div>`
).join('\n');
let bottom = elArray.map((v,i) =>
`<tr>
<td id="row${i+1}">
<div id="t${i}" class="ltarget"></div>
</td >
<td id="d2">${v}</td >
</tr>`
).join('\n');
html = `${top}
<table id="tablestyle">
${bottom}
</table>
`;
参考:
推荐阅读
- html - 网页设计引导程序 4 个可调整大小的列
- javascript - Tealium IQ:在开发谷歌浏览器控制台中覆盖 utag_data 值?
- java - 如何为 XML 中的每个属性创建 Xpath
- aws-sam-cli - 如何在本地运行 AWS SAM 模板并将其成功部署到 AWS(使用 Java Lambdas)?
- c++ - 从另一个 cpp 函数调用 cpp 函数时出错
- c# - 哪些字符在 url 编码时产生 %3q, %2o 个字符串
- groovy - 使用 Spock 验证非间谍方法调用
- javascript - 将掩码应用于输入
- sql - 更新 SQL 中值对匹配的位置
- sqlite - SQLite3 foreign_key_check 失败并出现错误 1