Javascript 数组中的类型和尝试将内容排序到表中时出现问题
基本上,这段代码应该生成两个表,一个包含数组中的每种类型,这可以正常工作,另一个包含具有相同名称的材质的汇总总数 e、 g.假设您输入两个红色油漆实例(10平方英尺和5平方英尺)和两个蓝色油漆实例(30平方英尺和10平方英尺),则第二个表格应显示 红色油漆:15平方英尺 蓝色油漆:40平方英尺 …但目前它只将与数组中第一个同名的材质相加,然后只吐出每个单独的材质,例如 红色油漆:15平方英尺 蓝色油漆:30平方英尺 蓝色油漆:10平方英尺 我尝试了一些不同的方法,但似乎无法正常工作,有人有什么想法吗Javascript 数组中的类型和尝试将内容排序到表中时出现问题,javascript,arrays,for-loop,types,Javascript,Arrays,For Loop,Types,基本上,这段代码应该生成两个表,一个包含数组中的每种类型,这可以正常工作,另一个包含具有相同名称的材质的汇总总数 e、 g.假设您输入两个红色油漆实例(10平方英尺和5平方英尺)和两个蓝色油漆实例(30平方英尺和10平方英尺),则第二个表格应显示 红色油漆:15平方英尺 蓝色油漆:40平方英尺 …但目前它只将与数组中第一个同名的材质相加,然后只吐出每个单独的材质,例如 红色油漆:15平方英尺 蓝色油漆:30平方英尺 蓝色油漆:10平方英尺 我尝试了一些不同的方法,但似乎无法正常工作,有人有什么想
function wallTableFunction(){
var tableDiv = document.getElementById("wallTable"),
table = "<table border='1'>" +
"<thread><th>Room</th><th>Surface</th><th>Material</th><th>Width</th><th>Height</th><th>Surface Area</th></thread>";
var totalDiv = document.getElementById("wallTotals"),
totalTable = "<table border='1'>" +
"<thread><th>Material</th><th>TOTAL</th></thread>";
for(var i = 0, j = walls.length; i<j; i++){
table += walls[i].tableRow();
}
for(var k = 0, l = otherWallArray.length; k<l; k++){
totalTable += otherWallArray[k].totalRow();
}
table += "</table>";
totalTable += "</table>";
tableDiv.innerHTML = table;
totalDiv.innerHTML = totalTable;
}
var wallTotals = function(){
for(var i = 0, j = walls.length; i<j; i++){
var wallMaterialFinal = walls[i].material;
var wallResultTotal = walls[i].result;
var a = new wallThing(wallMaterialFinal, wallResultTotal);
wallThingArray.push(a);
}
otherWallArray[0] = wallThingArray[0];
wallThingArray[0] = null;
};
window.onload = function() {
if(localStorage.getItem("wallArray")!== null){
var storedWalls = JSON.parse(localStorage["wallArray"]);
for(var i = 0, j = storedWalls.length; i<j; i++){
var wallRoom = storedWalls[i].room;
var wallSurf = storedWalls[i].surface;
var wallMat = storedWalls[i].material;
var wallWidth = storedWalls[i].width;
var wallHeight = storedWalls[i].height;
var wallResult = storedWalls[i].result;
var a = new Wall(wallRoom, wallSurf, wallMat, wallWidth, wallHeight, wallResult);
walls.push(a);
}
wallTotals();
for(var q = 0, r = wallThingArray.length; q<r; q++){
if(wallThingArray[q] != null) {
for (var s = 0, t = otherWallArray.length; s<t; s++) {
if(wallThingArray[q] != null) {
if (wallThingArray[q].material == otherWallArray[s].material) {
otherWallArray[s].result += wallThingArray[q].result;
wallThingArray[q] = null;
} else {
otherWallArray.push(wallThingArray[q]);
wallThingArray[q] = null;
}
}
}
}
}
wallTableFunction();
}
};
function-wallTableFunction(){
var tableDiv=document.getElementById(“wallTable”),
table=“”+
“房间表面材料宽度高度表面积”;
var totalDiv=document.getElementById(“wallTotals”),
totalTable=“”+
“材料总额”;
对于(var i=0,j=walls.length;i当您试图总结时,这里有一个逻辑缺陷:
for(var q = 0, r = wallThingArray.length; q<r; q++){
if(wallThingArray[q] != null) {
for (var s = 0, t = otherWallArray.length; s<t; s++) {
if(wallThingArray[q] != null) {
if (wallThingArray[q].material == otherWallArray[s].material) {
otherWallArray[s].result += wallThingArray[q].result;
wallThingArray[q] = null;
} else {
otherWallArray.push(wallThingArray[q]);
wallThingArray[q] = null;
}
}
}
}
}
请隔离具体问题。这是一个较大程序的一小部分,这是我能做的最具体的部分,对不起。当我尝试你的代码时,它抛出了一个错误,说你代码第4行的wallThingArray[q]为空。我会删除所有这些wallThingArray[q]=null;
行,就个人而言。这样你就不必做所有的null检查。如果你真的在数组中有null值,你可以将null检查If
语句放在你原来的语句中。将值设为null是我当时唯一能想到的让这个逻辑起作用的方法,我对此很陌生。所以简单地说删除所有的“wallThingArray[q]=nulls”?谢谢,我用了一个break
来打破循环,而不是nulls。null的东西也可以工作,但是你必须调整我给出的代码。
for (var q = 0, r = wallThingArray.length; q<r; q++) {
var foundMatch = false;
for (var s = 0, t = otherWallArray.length; s<t; s++) {
if (wallThingArray[q].material == otherWallArray[s].material) {
otherWallArray[s].result += wallThingArray[q].result;
foundMatch = true;
break;
}
}
if (!foundMatch) {
otherWallArray.push(wallThingArray[q]);
wallThingArray[q] = null;
}
}