2016-04-19 4 views
0

Ich habe 2 Tabellen, sagt Tabelle 1 und Tabelle 2Vergleich 2 Listen/Tabellen in Javascript mit jQuery

Tabelle 1 hat zwei Spalten:

Col B | Col C 

row 11 | row 12 
row 21 | row 22 
row 31 | row 32 

Tabelle 2 hat auch zwei Spalten:

Col B | Col C 

row 21 | row 22 
row 21 | row 01 
row 11 | row 12 

Ich möchte Tabelle 1 mit Tabelle 2 vergleichen und einige Dinge tun; Vergleichen Sie beide Tabellen und stellen Sie sicher, dass alle fehlenden Werte von Tabelle 1 in derselben Reihenfolge zu Tabelle 2 hinzugefügt werden.

Erwartetes Ergebnis

Col B | Col C 

row 11 | row 12 
row 21 | row 22 
row 31 | row 32 
row 21 | row 01 

ich versuchte, mit foreach-Schleife auf beiden Tabellen Implementierung, die Tabellen aus einer JSON-Struktur unter der Annahme, aber ich bin nicht sicher, ob ich es richtig mache. Was wäre der beste Weg, um die oben genannten Ergebnisse zu erzielen? Dank

Beispielliste:

{ 
    "defaultValue": [{ 
     "CellValues": [{ 
      "defaultValue": "row 11" 
     }, { 
      "defaultValue": "row 12" 
     }] 
    }, { 
     "CellValues": [{ 
      "defaultValue": "row 21" 
     }, { 
      "defaultValue": "row 22" 
     }] 
    },{ 
     "CellValues": [{ 
      "defaultValue": "row 31" 
     }, { 
      "defaultValue": "row 32" 
     }] 
    }] 
}  

$.each(Table1, function (Table1RowIndex, Table1Rowvalue) { 
    $.each(Table1Rowvalue.cells)(), function (Table1CellIndex, Table1Cellvalue) { 
     $.each(Table2, function (Table2rowIndex, Table2row) { 
      $.each(Table2.cells(), function (Table2cellIndex, Table2cell) { 
       // 
       } 
      }); 
     }); 
    }); 
}); 
+0

Einfach nur neugierig, ist der komplexe Objekt/Array-Setup für Ihre Tabellen in Stein gemeißelt? Es könnte einfacher sein, eine Lösung zu programmieren, wenn Sie etwas einfacheres tun könnten: '[[" Zeile 11 "," Zeile 12 "], [" Zeile 21 "," Zeile 22 "], [" Zeile 31 "] "Zeile 32"]] ' – David784

+0

ich habe hier vereinfacht und gepostet, da mein JSON selbst komplex ist und nicht so geradlinig wie du erwähnt hast! – Peru

Antwort

0

Ich glaube, Sie 3 verschachtelte Schleifen tun wollen statt 4. Sie tun richtige verschachtelte Schleifen für die Zeilen, aber wenn Sie eine Schleife durch die Spalten für Tabelle 1, die Sie gerade Holen Sie die entsprechende Spalte aus Tabelle 2 mit dem Index.

Es ist auch eine gute Idee, einen Klon von einer der Tabellen als Ihre Ausgabe zu machen ... das Ändern eines Arrays, das Sie durchlaufen, kann Probleme verursachen.

$(document).ready(function() { 
 

 
\t var t1 = { 
 
\t \t "defaultValue": [ 
 
\t \t \t {"CellValues": [ 
 
\t \t \t \t { "defaultValue": "row 11" }, 
 
\t \t \t \t { "defaultValue": "row 12" }] 
 
\t \t \t }, {"CellValues": [ 
 
\t \t \t \t { "defaultValue": "row 21" }, 
 
\t \t \t \t { "defaultValue": "row 22" }] 
 
\t \t \t }, { "CellValues": [ 
 
\t \t \t \t { "defaultValue": "row 31" }, 
 
\t \t \t \t { "defaultValue": "row 32" }] 
 
\t \t \t } 
 
\t \t ] 
 
\t }; 
 

 
\t var t2 = { 
 
\t \t "defaultValue": [ 
 
\t \t \t {"CellValues": [ 
 
\t \t \t \t { "defaultValue": "row 21" }, 
 
\t \t \t \t { "defaultValue": "row 22" }] 
 
\t \t \t }, {"CellValues": [ 
 
\t \t \t \t { "defaultValue": "row 21" }, 
 
\t \t \t \t { "defaultValue": "row 01" }] 
 
\t \t \t }, { "CellValues": [ 
 
\t \t \t \t { "defaultValue": "row 11" }, 
 
\t \t \t \t { "defaultValue": "row 12" }] 
 
\t \t \t } 
 
\t \t ] 
 
\t }; 
 

 
\t var out = JSON.parse(JSON.stringify(t1)); // clone t1 to use as output 
 

 
\t $.each(t2.defaultValue, function(i2, r2) { 
 
\t \t var rowMatch = false; 
 
\t \t $.each(t1.defaultValue, function(i1, r1) { 
 
\t \t \t var cellMatch = true; 
 
\t \t \t $.each(r1.CellValues, function(j, c1) { 
 
\t \t \t \t var c2 = r2.CellValues[j]; 
 
\t \t \t \t if(c1.defaultValue!=c2.defaultValue) { 
 
\t \t \t \t \t cellMatch = false; 
 
\t \t \t \t \t return false; 
 
\t \t \t \t } 
 
\t \t \t }); 
 
\t \t \t if(cellMatch) { 
 
\t \t \t  rowMatch = true; 
 
\t \t \t  return false; 
 
\t \t \t } 
 
\t \t }); 
 
\t \t if(!rowMatch) { 
 
\t \t \t // r1 does not exist in t2, so we need to add it 
 
\t \t \t out.defaultValue.push(r2); 
 
\t \t } 
 
\t }); 
 
\t log(JSON.stringify(out)); 
 

 
}); 
 

 
function log() { 
 
\t var s = ''; 
 
\t $.each(arguments, function() { 
 
\t \t s += " " + this; 
 
\t }); 
 
\t $('#out').append(s+"<br>"); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 

 
<div id=out></div>