Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 数组中的类型和尝试将内容排序到表中时出现问题_Javascript_Arrays_For Loop_Types - Fatal编程技术网

Javascript 数组中的类型和尝试将内容排序到表中时出现问题

Javascript 数组中的类型和尝试将内容排序到表中时出现问题,javascript,arrays,for-loop,types,Javascript,Arrays,For Loop,Types,基本上,这段代码应该生成两个表,一个包含数组中的每种类型,这可以正常工作,另一个包含具有相同名称的材质的汇总总数 e、 g.假设您输入两个红色油漆实例(10平方英尺和5平方英尺)和两个蓝色油漆实例(30平方英尺和10平方英尺),则第二个表格应显示 红色油漆:15平方英尺 蓝色油漆:40平方英尺 …但目前它只将与数组中第一个同名的材质相加,然后只吐出每个单独的材质,例如 红色油漆:15平方英尺 蓝色油漆:30平方英尺 蓝色油漆:10平方英尺 我尝试了一些不同的方法,但似乎无法正常工作,有人有什么想

基本上,这段代码应该生成两个表,一个包含数组中的每种类型,这可以正常工作,另一个包含具有相同名称的材质的汇总总数

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;
    }
}