2D数组比较 - 嵌套用于循环错误

时间:2012-01-27 19:51:36

标签: javascript

我有以下函数比较两个2D数组中的第一列值。

var new_array = [['EMI_007','lion','cat'],
                 ['EMI_008','cat','dog']
                ];

var existing_array = [['EMI_002','cat','tiger'],
                     ['EMI_004','hen','pig'],
                     ['EMI_007','pigeon','hen'],
                     ['EMI_001','boar','tiger']
                ];

将new_array [i] [0]中的值与existing_array [j] [0]中的值进行比较。

如果它们相同,整个行将被new_array中的行替换,否则new_array行将连接到现有数组。

在上面的示例中,new_array与existing_array进行比较。

EMI_007存在于'existing_array'中,因此它被['EMI_007','lion','cat']替换,['EMI_008','cat','dog']被附加到现有数组。

我创建了以下功能,但似乎有错误。

如果在'existing_array'中不存在new_array中找到EMI ID的行,则会多次插入。

function concat_2D_array(existing_array, new_array){
    for (var i=0; i<new_array.length; i++) {
        for (var j=0; j<existing_array.length; j++) {
            if(new_array[i][0] == existing_array[j][0]){
            alert("ok,it already exists in the existing_array");
            existing_array.splice(j,1,new_array[i]);
            }
            else{
            alert("It is not in the existing array");
            // existing_array.concat(new_array[i]);
            }
        }
    }
    alert("returned existing_array"+existing_array)
    return existing_array;
}

非常感谢任何帮助

1 个答案:

答案 0 :(得分:1)

您的代码的主要问题是您尝试在每个步骤中向现有数组添加新项目,并且一旦添加就不要离开循环。

function concat_2D_array(existing_array, new_array){
    for (var i=0; i<new_array.length; i++) {
        var j = 0;
        while(j<existing_array.length){
            if(new_array[i][0] == existing_array[j][0]){
                alert("ok,it already exists in the existing_array");
                existing_array.splice(j,1,new_array[i]);
                break;  // we found it, replaced it, leaving the loop
            } else if (j+1 >= existing_array.length){
                alert("It is not in the existing array");
                existing_array.splice(j+1,0,new_array[i]);
                break;  // we didn't find it, added it, leaving the loop
            } else {
                j++;
            }
        }
    }
    alert("returned existing_array"+existing_array)
    return existing_array;
}