Ich habe eine Web-App, die Ihre Einkäufe verfolgt und verschiedene Statistiken anzeigt. Auf einer der Seiten habe ich jQuery ajax Anfragen, die Einkäufe eines Benutzers von einem API-Aufruf laden. Dann werden alle Käufe als JavaScript-Objekte in ein globales Array namens G_PURCHASES
gelegt.JavaScript-Funktion Array.prototype.includes() funktioniert nicht in for-Schleife
So weit so gut. Dann rufe ich eine Funktion auf, die jQuerys Deferred()
verwendet, um es verkettbar zu machen; Es iteriert G_PURCHASES
und erhält alle eindeutigen purchase.item.category
's (sehen Sie sich die relevante Struktur des Kaufobjekts an), indem Sie prüfen, ob G_PURCHASES[i].item.category
in einem anderen globalen Array namens G_CATEGORIES
mit Array.includes()
enthalten ist. Und wenn es nicht ist, dann push()
es in G_CATEGORIES
.
Der Fehler, den ich mit einem Problem habe, ist, dass auch nach einem category
Objekt in das G_CATEGORIES
Array geschoben worden, die Array.includes()
Prüfung noch false
zurückkehrt, jedes Mal. Überprüfen Sie den relevanten Code und geben Sie ihn aus, um ihn zu löschen.
// Relevant structure of the purchase object
purchase = {
item: {
category: {
categoryID: int,
name: string
}
}
// Relevant code
var G_PURCHASES = []; // array declared globally
// it is successfully filled with @purchase objects from another function
var G_CATEGORIES = []; // array declared globally
// to be filled by @LoadAllCategories
var LoadAllCategories = function() {
// make a jQuery Deffered
let func = $.Deferred(function() {
let allP = G_PURCHASES; // make a shortcut
let allC = C_CATEGORIES; // make another shortcut
for (var i = 0; i < allP.length; i++) {
// get whether the current purchase.item.category
// already exists in allC array
let exist = allC.includes(allP[i].item.category);
// console.log the above result
console.log('i = ' + i + ', category exists = ' + exist);
// if it doesn't exist then push it in
if (!exist) allC.push(allP[i].item.category);
}
this.resolve();
});
return func;
}
// Input
G_PURCHASES has 6 @purchase objects with 3 unique item.category 'ies
// Output
i = 0, category exists = false
i = 1, category exists = false
i = 2, category exists = false
i = 3, category exists = false
i = 4, category exists = false
i = 5, category exists = false
// Result
G_CATEGORIES contains duplicate categories
Ich versuchte Array.indexOf()
und jQuery $.inArray()
ohne Erfolg zu nutzen. Egal, was ich console.log()
Ich kann nicht scheinen, wo der Fehler liegt. Also, wenn Sie mir sagen können, warum Array.includes()
nicht funktioniert innerhalb dieser for
Schleife werde ich Sie finden und ich werde Ihnen ein Bier kaufen!
Warum nicht 'console.log (allC, allP [i])' und sehen, was Sie haben. – adeneo
Ich bekomme ein Array und ein Objekt, genau wie erwartet: 'Array [] Objekt {Objekt: Objekt}' 'Array [Objekt] Objekt {Objekt: Objekt}' 'Array [Objekt, Objekt] Objekt {Objekt: Objekt} 'und so weiter –