2016-07-25 3 views
0

Ich mag zu finden, wenn es eine Diskrepanz von der Benutzereingabe gegen die vorhandenen Daten ist dann etwas tun:Javascript - wie man in der Schleife nach Mismatch sucht?

var reset = false;  
var user = [ 
    { public_name: 'e', code_name: 'f' }, 
    { public_name: 'c', code_name: 'not match' }, 
    { public_name: 'a', code_name: 'b' } 
]; 

var server = [ 
    {"code_name":"b","public_name":"a"}, 
    {"code_name":"d","public_name":"c"}, 
    {"code_name":"f","public_name":"e"} 
] 

user.forEach(function(field, index) { 
    var matchingSpecies = server.find(function(item) { 
     if (item.code_name === field.code_name 
      && item.public_name === field.public_name) { 
      // matched so do nothing 
     } else { 
      // not match and stop looping 
      reset = true; 
     } 
    }); 
}); 

console.log(reset); 

aber das Ergebnis bekomme ich immer true obwohl es eine Übereinstimmung gibt.

irgendwelche Ideen?

+1

Es könnte sein, weil Sie alle Elemente in der 'user' Array iterieren durch. Also, selbst wenn einer von ihnen nicht übereinstimmt, wird 'reset' auf' true' gesetzt. –

+1

Warum versuchen Sie nicht, diejenigen zu filtern, die nicht übereinstimmen, und prüfen Sie, ob es welche gibt. Wenn dies der Fall ist, weisen Sie True dem Zurücksetzen zu? – n0m4d

+0

@ n0m4d Wie benutze ich den Filter? – laukok

Antwort

1

Sie könnten Ihren Code wie folgt anpassen:

var reset = false;  
var user = [ 
    { public_name: 'e', code_name: 'f' }, 
    { public_name: 'c', code_name: 'not match' }, 
    { public_name: 'a', code_name: 'b' } 
]; 

var server = [ 
    {"code_name":"b","public_name":"a"}, 
    {"code_name":"d","public_name":"c"}, 
    {"code_name":"f","public_name":"e"} 
] 

user.forEach(function(field, index) { 
    var match = false; 
    server.find(function(item) { 
     if (item.code_name === field.code_name 
      && item.public_name === field.public_name) { 
      match = true; 
     } 
    }); 
    reset = reset || ! match; 
}); 

console.log(reset); 
+0

danke. aber der Benutzer hat manchmal dieses '{public_name: 'c', code_name: 'nicht übereinstimmen'},' – laukok

+1

Update 'reset = reset || ! match; 'to' reset =! Übereinstimmung || reset; ' – Rajesh

+0

@teelou, wenn das Element" nicht übereinstimmen ", als es zurücksetzen soll True? – n0m4d

1

Sie so etwas wie dies versuchen:

Anmerkung: Ich habe eine Kopie der Original-user gemacht und aktualisiert es server passen beide Zustände zu zeigen, .

JSFiddle

function findMatching(array) { 
 
    var _reset = false; 
 
    array.forEach(function(field, index) { 
 
    var matchingSpecies = server.find(function(item) { 
 
     return item.code_name !== field.code_name && item.public_name === field.public_name 
 
    }); 
 
    _reset = matchingSpecies && Object.getOwnPropertyNames(matchingSpecies).length>0 || _reset 
 
    }); 
 
    return _reset; 
 
} 
 

 
var user=[{public_name:"e",code_name:"f"},{public_name:"c",code_name:"not matched"},{public_name:"a",code_name:"b"}], 
 
    user1=[{public_name:"e",code_name:"f"},{public_name:"c",code_name:"d"},{public_name:"a",code_name:"b"}], 
 
    server=[{code_name:"b",public_name:"a"},{code_name:"d",public_name:"c"},{code_name:"f",public_name:"e"}]; 
 

 
console.log(findMatching(user)); 
 
console.log(findMatching(user1));

Verwandte Themen