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



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

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=[]的数组,并将userBuilt数组中完全唯一的项(如[1,"X1X"]和[1,"131"])推送到另一个名称为incorrect=[]的阵列。下面的代码用于推送匹配,但我不知道如何将唯一的对推送到不正确的=[]数组。

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

提前感谢!

在交叉循环完全完成之前,我们不知道特定元素是否匹配。因此,跟踪不匹配的索引,并在以后发现时从跟踪数组中取消索引。

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

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)

exactMatches包含匹配项。

[[4, "111"], [3, "231"], [3, "232"], [3, "213"], [3, "211"]]

incorrect包含不匹配元素的索引

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

JSFiddle

在您的示例中,您只比较子数组的字符串部分。忽略第一个数字。如果希望两个元素完全匹配,那么只需在条件中包含order[i][0] === userBuilt[e][0]即可。

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] );  
    } else {
        incorrect.push(userBuilt[i]);
    }
}
}

如果它没有进入exactMatches,那么它似乎进入了不正确的,所以只需添加else语句,该语句放入不正确的数组

最新更新