2017-10-11 1 views
-1

Ich habe einen API-Aufruf, der mit einem aktualisierten jSON-Objekt antwortet, ich habe auch 1 statische jSON-Objektdatei. Ich versuche, einen Wert im Objekt pro Team mit demselben Namen zu vergleichen.JavaScript/jQuery: Vergleiche 2 jSON-Objekte und Ausgabeergebnis in neues Objekt

Wenn also Team John 22 in der alten Datei hatte und jetzt 28, sollte das neue Objekt Team John als 6 ausgeben. Subtrahieren Sie die 2 und zeigen Sie den Unterschied an.

Ich habe ein JsFiddle gemacht, um zu verstehen und zu aktualisieren.

AKTUELLES UPDATE: Die Antwort wurde von mscdeveloper gelöst! Überprüfen Sie seinen Beitrag und antworten Sie unten.

UPDATE (nicht die Antwort): ich eine Lösung gefunden haben, während in Stackoverflow gesucht, das tut genau das, was ich will, aber ich verlor den Namen des Teams in den Prozess, wie kann ich den Code, wo es doesn beheben Lösche es nicht, ich weiß, dass es etwas mit der Funktion groupByTypeID zu tun hat, die ich habe?

jsFiddle Aktualisiert:https://jsfiddle.net/kqmfsz9n/5/

var obj1 = { 
    "teams": [ 
    { 
     name: 'Test 1', 
     numMembers: '50' 
    }, 
    { 
     name: 'Test 2', 
     numMembers: '12' 
    } 
    ] 
}; 

var obj2 = { 
    "teams": [ 
    { 
     name: 'Test 1', 
     numMembers: '75' 
    }, 
    { 
     name: 'Test 2', 
     numMembers: '18' 
    } 
    ] 
}; 

var newObj = {}; 
function groupByTypeID(arr) { 
    var groupBy = {}; 
    jQuery.each(arr, function() { 
    groupBy[this.name] = parseInt(this.numMembers); 
    }); 
    return groupBy; 
} 

var userArrayGroups = groupByTypeID(obj2.teams); 
var origArrayGroups = groupByTypeID(obj1.teams); 

var newObj = []; 
for (var prop in userArrayGroups) { 
    newObj[prop] = userArrayGroups[prop] - origArrayGroups[prop]; 
    newObj.push(userArrayGroups[prop] - origArrayGroups[prop]); 
    if (newObj[prop] == 0) { 
    delete newObj[prop]; 
    } 
} 

console.log(newObj); 

Alle Hilfe ist willkommen! Danke.

+0

Was ist mit anderen Arten? (Strings, Datumsangaben, Arrays, ...) –

+0

Da ** JSON ein String-Format ist ** müssen Sie nur einen String-Vergleich mit '===' .of Ihrer beiden JSON-Strings durchführen. Es sei denn, Sie sprechen nicht über JSON, aber das ist, was Sie sagen ... –

+0

Wow, so viele Abstimmungen für was? Ich versuche, das gelöst zu bekommen, aber die Leute stimmen in diesen Tagen ohne Grund ab, ohne zu verstehen, warum. Alles, was ich hatte, war eine einfache Frage, wenn ich numMembers von obj1 mit obj2 numMembers subtrahieren wollte, wie würde ich darüber gehen? –

Antwort

1
var obj1 = { 
     "teams": [ 
     { 
      name: 'Test 1', 
      numMembers: '50' 
     }, 
     { 
      name: 'Test 2', 
      numMembers: '12' 
     } 
     ] 
    }; 

    var obj2 = { 
     "teams": [ 
     { 
      name: 'Test 1', 
      numMembers: '75' 
     }, 
     { 
      name: 'Test 2', 
      numMembers: '18' 
     } 
     ] 
    }; 

    var newObj = {}; 
var items_arr=[]; //array of obj2 not exist in obj1 

    if(obj1.teams){    //if exist array of teams obj1 
    var o1teams = obj1.teams; 
    if(obj2.teams){  //if exist array of teams obj2 
     var o2teams = obj2.teams; 
     for(var key2 in o2teams){ 
      var o2teams = obj2.teams; 
      for(var key1 in o1teams){ 
        if(o2teams[key2].name==o1teams[key1].name){ 
         var numMembers_o1_int=parseInt(o1teams[key1].numMembers)||0; 
         var numMembers_o2_int=parseInt(o2teams[key2].numMembers)||0; 
         var result_numMembers_int=numMembers_o2_int-numMembers_o1_int; 
         var result_numMembers=result_numMembers_int+''; //convert to string 
         var items_for_add=o1teams[key1]; 
         items_for_add.numMembers=result_numMembers; 
         items_arr.push(items_for_add); 
        } 
      } 
     } 
     } 
    } 
    newObj.items=items_arr; 

    console.log(newObj); 

https://jsfiddle.net/mscdeveloper/uxv1t2a7/3/

+0

Obwohl dies für den Vergleich der 2 Objekte sehr hilfreich ist, werden die numMembers nicht voneinander subtrahiert und die Ergebnisse in das neue Objekt oder Array verschoben. –

+0

Ich habe meine jsFiddle aktualisiert, um die richtige Antwort zu geben, die noch ein bisschen mehr zwickt bitte überprüfen Sie es –

+0

Danke, das hat funktioniert! Sie sind ein Gelehrter und ein Gentleman! –

Verwandte Themen