2017-07-26 2 views
0

Ich möchte nicht doppelt das gleiche Produkt anzeigen. Wenn isbn wiederholt wird, dann zeige es nicht doppelt an.Position von json jquery entfernen

{ 
    "products": [{ 
    "ident": "001", 
    "isbn": "2332", 
    "discount": "10%", 
    "bookstore": "library1" 
    }, { 
    "ident": "002", 
    "isbn": "2332", 
    "discount": "20%", 
    "bookstore": "library2" 
    }, { 
    "ident": "003", 
    "isbn": "3422", 
    "discount": "30%", 
    "bookstore": "library3" 
    }, ] 
} 

function getData() { 
    $.getJSON('data.json', function(data) { // get data from data.json 
    var products = data.products; 
    var tr = $("<tr>"); 
    var items = ''; 

    $.each(products, function(key, value) { 
     items += "<tr position=" + value.bookstore + ">"; 
     items += "<td>" + value.ident + "</td>"; 
     items += "<td>" + value.isbn + "</td>"; 
     `enter code here` 
     items += "<td>" + value.discount + "</td>"; 
     items += "<td>" + value.bookstore + "</td>"; 
     items += "</tr>"; 
    }); 

    $('#data').append(items); // show data in table 
    }); 
+0

Warum so viele Wiederholungen in Ihrer Frage Beschreibung? – GibboK

+2

schönes Mantra! Was ist die Regel zu wissen, welche man behalten oder weggeworfen wird? der erste? – Kaddath

+0

ich viele Wiederholungen versehentlich hinzufügen. Es tut mir leid – Piotr

Antwort

-1

Einfügen in ein Array der ISBN dann mit indexOf überprüfen, ob es in der Anordnung vorhanden ist.

var arr = [ 

    { 
     "ident":"001", 
     "isbn":"2332", 
     "discount":"10%", 
     "bookstore": "library1" 
    }, 

    { 
     "ident":"002", 
     "isbn":"2332", 
     "discount":"20%", 
     "bookstore": "library2" 
    }, 

    { 
     "ident":"003", 
     "isbn":"3422", 
     "discount":"30%", 
     "bookstore": "library3" 
    } 
    ]; 

    var arrISBN = []; 

    for(let index in arr) { 

     if (arrISBN.indexOf(arr[index].isbn) == -1 ) { 
      arrISBN.push(arr[index].isbn); 
      console.log("No duplicates"); 
     } 


} 
1

Sie könnten in einem Array halten, die Liste der ISBN des halten, und dann prüfen, ob das Array eine ISBN enthält, bevor mit ihm etwas zu tun.

var bookList = []; 

$.each(products, function(key, value) { 

    // Pushes value.isbn to the bookList array 
    bookList.push(value.isbn); 

    // If the IBSN is not present in bookList then act as if it's a new entry instead of repeating it. 
    if (!bookList.includes(value.isbn)) { 
    // Do something with the data here. 
    } 
} 
+1

Guter Ansatz. Es ist wichtig zu beachten, dass "Array.prototype.includes" derzeit nicht in IE unterstützt wird. Wenn Sie sich für die Implementierung dieses Ansatzes entscheiden, müssen Sie das [polyfill] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/includes) verwenden, das von _MDN_ bereitgestellt wird. . – War10ck

+0

Ah ja, guter Punkt! –

+0

@JamesIves können Sie die Tabelle im laufenden Betrieb erstellen und vermeiden, Zeilen mit doppelten Werten hinzuzufügen [fidde] (https://jsfiddle.net/8kzmq02b/1/). Was ist deine Idee? – gaetanoM

0

Sie können dies mit einer einfachen for Schleife erreichen. Um dieser Frage willen habe ich Ihre JSON Daten fest codiert. Sie können jedoch den Ajax-Request mit der $.getJSON() Routine darin Platz implementieren (wie Sie oben haben) und das Ergebnis wird das gleiche sein:

var json = { 
 
    "products": [{ 
 
    "ident": "001", 
 
    "isbn": "2332", 
 
    "discount": "10%", 
 
    "bookstore": "library1" 
 
    }, { 
 
    "ident": "002", 
 
    "isbn": "2332", 
 
    "discount": "20%", 
 
    "bookstore": "library2" 
 
    }, { 
 
    "ident": "003", 
 
    "isbn": "3422", 
 
    "discount": "30%", 
 
    "bookstore": "library3" 
 
    }, ] 
 
}; 
 

 
var products = {}; 
 

 
for(var a = 0, len = json.products.length; a < len; a++) { 
 
\t \t if(products[json.products[a].isbn]) { 
 
    \t products[json.products[a].isbn].bookstore = products[json.products[a].isbn].bookstore + "," + json.products[a].bookstore; 
 
    } else { 
 
    \t \t products[json.products[a].isbn] = json.products[a]; 
 
    } 
 
} 
 

 
$.each(products, function (key, value) { 
 
\t console.log(value); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

Diese Routine jedes Produkt trägt zu einem neuen products Objekt. Jeder Objektschlüssel ist die isbn Nummer des Produkts. Wenn die isbn bereits vorhanden ist, werden die Buchhandlungen, in denen das Produkt verkauft wird, aktualisiert, um den vorherigen Wert und den neuen Wert zu enthalten. Wenn isbn nicht vorhanden ist, wird das Produkt als neues Produkt zum Objekt products hinzugefügt.

+0

Vielen Dank. Es ist großartig – Piotr