2016-09-08 6 views
1

Ich habe zwei JavaScript-Objekt, wie zwei JavaScript-Array vergleichen angular.foreach mit

var obj1= { 
      key1:'value1', 
      key2:'value2' 
    }; 

Und

var obj2= { 
      key1:'value1', 
      key2:'someOtherValue' 
    }; 

Wie Sie es einen Unterschied/w beide Objekte b sehen kann, ist bei key2, i möchte eine eckige foreach-schleife, die beide objekte überprüfen kann und eine konsolenmeldung "difference is at key2" zurückgibt. Ich habe bereits angular foreach probiert, aber es erlaubt nicht mehr als ein Objekt, also wie soll ich vergleichen?

+0

möchten Sie den Wert des gleichen Schlüssels vergleichen? Warum eckig? –

+0

möglich duplizieren: http://stackoverflow.com/questions/29133885/angularjs-compare-two-arrays – Kafo

+0

Ich arbeite bereits an eckigen js, obj1 kommt aus der Datenbank und obj2 ist Benutzereingabe Ich möchte die Differenz Feld für Feld überprüfen –

Antwort

0

Bitte nicht angular.foreach verwenden.

  • Javascript for ist schneller.
  • Sie können nicht brechen in angular.foreach verwenden.

var diffs = []; 
for (var key in obj1) { 
    if obj1[key] !== obj2[key]{ 
    diffs.append([key]); 
    } 
} 
console.log(diffs) 

beiden Wörterbücher haben gleiche Schlüssel Unter der Annahme, ..

0

Im Klar Javascript, könnten Sie ein Map für sie verwenden.

var obj1 = { key1: 'value1', key2: 'value2' }, 
 
    obj2 = { key1: 'value1', key2: 'someOtherValue' }, 
 
    map = new Map(); 
 

 
Object.keys(obj1).forEach(k => map.set(k, obj1[k])); 
 
Object.keys(obj2).forEach(k => map.get(k) !== obj2[k] && console.log(k + ' is different'));

0

ist hier rein AngularJS Code mit Winkel foreach Schleife.

var keepGoing = true; 
angular.forEach(obj1, function(value, key){ 
    angular.forEach(obj2, function(value2, key2){ 
     if(keepGoing) { 
      if(value == value2){ 
       keepGoing = true; 
      } 
      else{ 
       console.log('Difference is at', key2) 
       keepGoing = false; 
      } 
     } 
    }) 
})