我有以下函数比较两个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;
}
非常感谢任何帮助
答案 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;
}