比较包含多个值对的两个JavaScript数组

比较包含多个值对的两个JavaScript数组,javascript,arrays,Javascript,Arrays,我有两个数组,我正试图与以下格式的数据进行比较: var order = [[1,"121"], [2,"111"], [2,"321"], [3,"232"], [3,"213"], [4,"211"]], userBuilt = [[4,"111"], [1,"131"], [3,"321"], [3,"232"], [3,"211"], [3,"213"], [1, "X1X"]]; var exactMatches=[]; var incorrect=[]; 我想将包含匹配字符串的对

我有两个数组,我正试图与以下格式的数据进行比较:

var order = [[1,"121"], [2,"111"], [2,"321"], [3,"232"], [3,"213"], [4,"211"]],
userBuilt = [[4,"111"], [1,"131"], [3,"321"], [3,"232"], [3,"211"], [3,"213"], [1, "X1X"]];

var exactMatches=[];
var incorrect=[];
我想将包含匹配字符串的对推送到一个名为exactMatches=[]的数组,并将从用户构建的数组(如[1,“X1X”]和[1,“131”])中完全唯一的项推送到另一个名为Error=[]的数组。下面的代码用于推送匹配项,但我不知道如何将唯一对推送到错误的=[]数组

for ( var i = 0; i < order.length; i++ ) {
   for ( var e = 0; e < userBuilt.length; e++ ) {
      if(order[i][1] === userBuilt[e][1] ){
         exactMatches.push( userBuilt[i] ); 
      } 
   }
}   
for(变量i=0;i
提前谢谢

for(变量i=0;ifor ( var i = 0; i < order.length; i++ ) {
for ( var e = 0; e < userBuilt.length; e++ ) {
    if(order[i][1] === userBuilt[e][1] ){
        exactMatches.push( userBuilt[i] );  
    } else {
        incorrect.push(userBuilt[i]);
    }
}
}
对于(var e=0;e
如果它没有进入exactMatches,那么它就进入了不正确的数组,所以只需添加else语句,将其放入不正确的数组中,直到交叉循环完全完成,我们才知道特定元素是否匹配。因此,跟踪非匹配的索引,并在以后发现时从跟踪数组中取消索引

找到匹配项后,我们可以立即将其推入数组

var order = [[1,"121"], [2,"111"], [2,"321"], [3,"232"], [3,"213"], [4,"211"]],
    userBuilt = [[4,"111"], [1,"131"], [3,"321"], [3,"232"], [3,"211"], [3,"213"], [1, "X1X"]]

var exactMatches=[]
var incorrect=[] // keeping track of indexes so need two tracking arrays
    incorrect['o'] = []
    incorrect['u'] = []

for ( var i = 0; i < order.length; i++ ) {
    for ( var e = 0; e < userBuilt.length; e++ ) {
        if ( order[i][1] === userBuilt[e][1] ) { // comparing second element only
            exactMatches.push( userBuilt[e] );
            incorrect['o'][i] = null; // remove from "no match" list
            incorrect['u'][e] = null; // remove from "no match" list
        }
        else { // add to "no match" list
            if ( incorrect['o'][i] !== null ) { incorrect['o'][i] = i; }
            if ( incorrect['u'][e] !== null ) { incorrect['u'][e] = e; }
        }
    }
}
console.log(incorrect)
console.log(exactMatches)
不正确
包含不匹配元素的索引

[0, null, null, null, null, null] // order array
[null, 1, null, null, null, null, 6] // userBuilt array


在您的示例中,您只比较子阵列的字符串部分。第一个数字被忽略。如果您想要两个元素的精确匹配,那么在条件中简单地包含<代码> [i] [0 ]==UsBuff[e](0)< /代码>。[3,“321”]会被推到精确的比赛中。基本上,如果字符串部分是有序的,并且是用户构建的,那么它们将被推送到exactMatches。如果没有,那么他们将转到不正确的数组。不确定为什么我投了反对票,这是一个合理的问题,但很酷,我能够使我的功能正常工作。如果循环中稍后有匹配项呢?我尝试了上述操作,但不幸的是,它不起作用。下面的答案真的帮了我大忙。谢谢你的回答!我不认为通过跟踪非匹配项的索引来采用这种方法。我能够根据需要使功能正常工作。再次感谢!
[0, null, null, null, null, null] // order array
[null, 1, null, null, null, null, 6] // userBuilt array