Javascript - 动态多维数组

时间:2014-08-01 15:44:35

标签: javascript arrays multidimensional-array

我一直在努力争取这一天,我无法理解。我搜索了这个网站,找不到答案,或者我不够聪明,无法从那里的答案中找出答案。这是我想要做的: -

我有一个包含人名和努力的HTML表格。我已经创建了一个唯一的名称列表(在我的选项元素中),所以我想循环遍历表,并为每个名称的出现,将工作添加到数组条目。我最终想要的是一小部分人名和他们花费的全部精力......我希望这是有道理的......

我大约4周前才开始使用JS,所以如果它看起来很难看我很抱歉: -

 var memArray=new Array(); //define an empty array.

    for(x=1;x<=opt.length-1;x++) { //loop through option element to get names 
        memArray[x]=[]; // add a second array (inner) to outer array
        memArray[x]=opt.options[x].value; //post value to first row of outer array
    }
    for(y=1;y<=obj.rows.length-2;y++){ //cycle through html table called obj
        for(z=1;z<=memArray.length-1;z++) { //for each row in table, cycle through outer array
            if(memArray[z]==obj.rows[y].cells[3].innerHTML) { //if the names match......
                memArray[z][0]=memArray[z][0]+obj.rows[y].cells[6].innerHTML; //grab the effort from the 6th table cell and add to inner array to get total....
                //alert(memArray[z]+' '+obj.rows[y].cells[6].innerHTML);
                }
        }
    }
    for(z=1;z<=memArray.length-1;z++) {
        alert(memArray[z][0]); //loop through array 
        }

当我尝试读取第二个数组维度的值时,它会说“未定义” - 但我试图用“memArray [z] [0]将该人的努力总和添加到该数组元素= memArray [Z] [0] + obj.rows [Y] .cells [6] .innerHTML;“

我在JSFiddle

中创建了问题
  • 我从option元素中提取值并创建我的外部数组
  • 我需要遍历表元素 - 对于每个名称的出现,从第二列获取值并使用sum(对于该名称)更新内部数组。因此,“名称1”应该总计15,“名称2”应该总共7。

1 个答案:

答案 0 :(得分:0)

如果我理解你需要什么 - 我建议你使用一个Object(现在是Array)作为值的哈希值。在这种情况下,你会得到像字典(键值集合)的smth,其中键 - 名称,值 - 任何东西(在你的情况下 - 我认为一个字符串,但也可能是一个数组):

var hash = {};

for(var x = 1; x <= opt.length-1; x++) { //loop through option element to get names 
    hash[opt.options[x].value] = null; //if you need an array - hash[opt.options[x].value] = [];
}

for(var y = 1; y <= obj.rows.length-2; y++){ //cycle through html table called obj
    var name = obj.rows[y].cells[3].innerHTML;
    if (hash[name] !== undefined) { //if the given user is inside the hash
        hash[name] += obj.rows[y].cells[6].innerHTML;
    }
}

for(var name in hash) {
    alert(hash[name]);
}

注意: innerHTML返回一个字符串。因此,如果您需要总结整数值 - 您必须先解析它们。根据值的类型,使用parseIntparseFloat

更新:您可能会看到包含一些虚假数据的工作示例(包含解析数字)here