javascript - 在 arry 循环中重复结果
问题描述
我的代码有什么问题:
function Nums( use, dep, unt, prt, no){
this.uses = use;
this.department = dep;
this.units = unt;
this.part = prt;
this.numbers = no;
}
var n1 = new Nums( "use1", "depart1", "unit1", "part1", "3562")
var n2 = new Nums( "use2", "depart2", "unit2", "part2", "5226" )
var obj = [n1, n2];
var res = [];
var r = "";
var srch = "5"
var div = document.getElementById("a");
for( i = 0; i<obj.length; i++){
for( key in obj[i]){
if(obj[i][key].includes(srch)){
res.push(obj[i])
for( x = 0; x<res.length; x++){
for( itm in res[x]){
res2 = r += res[x][itm]
div.innerHTML = res2;
}
}
}
}
}
console.log(res)
我想在innerhtml中打印结果,但输出在“html”和控制台内重复2次,结果是正确的。原因是什么?
innerHTML 结果:
使用1 => 离开1 => 单元1 => 部分1 => 3562 =>
use1 => depart1 => unit1 => part1 => 3562 =>
使用2 => 离开2 => 单元2 => 部分2 => 5226 =>
控制台结果:
[{使用:“use1”,部门:“depart1”,单位:“unit1”,部分:“part1”,数字:“3562”},{使用:“use2”,部门:“depart2”,单位:“unit2 ", 部分:"part2", 数字:"5226" }]
解决方案
您在每次迭代时遍历 res 数组并继续附加它。
for( i = 0; i<obj.length; i++){
for( key in obj[i]){
if(obj[i][key].includes(srch)){
res.push(obj[i])
for( x = 0; x<res.length; x++){
for( itm in res[x]){
res2 = r += res[x][itm]
div.innerHTML = res2;
}
}
}
}
}
它需要被移出或仅循环您刚刚添加的最后一个。
for (let i = 0; i<obj.length; i++) {
for (let key in obj[i]){
if(obj[i][key].includes(srch)) {
res.push(obj[i])
}
}
}
for (let x = 0; x<res.length; x++) { //pull out of the loops above
for(let itm in res[x]) {
res2 = r += res[x][itm]
}
}
div.innerHTML = res2; // only update DOM when done
并确保你声明了你的变量,你正在制作很多全局变量。
推荐阅读
- r - 如何使用 plotly 库将多列中的值绘制到旭日形图中?
- c - 如何使用 STM32F4 从 MAX30100 读取 FIFO 数据
- php - 来自主机名“localhost”而不是容器名的php容器的数据库连接
- javascript - 猫鼬模式方法和 .pre('save') 不起作用
- asp.net-mvc - 为什么我的 ASP.NET MVC 需要 DTC 来完成事务,而我的 WPF 应用程序使用相同的 .DLL 不需要?
- php - 为什么 Gulp 在 Laravel 6 的生产版本中不可用?
- javascript - rollup.js 如何在不更改源文件的情况下导入其他文件
- ios - iOS 中的可缩放图像
- yocto - 在 Yocto 中,如何将包 A 的版本限制指定为包 B 的当前版本?
- python - 将 Python XML 请求转换为 Pandas 数据框