Wenn eine der choice
Objekts von choices
Array nicht in irgendeiner der results
Array Verbergen choice
Element in diesem Fall {"choice": "f"}
und {"choice": "g"}
ist nicht verfügbar, in einem dieser 3 Ergebnisse also muss ich es verstecken. Wie kann ich es tun?wie die Elemente von einem Array in einem anderen Array vergleichen
Antwort
Sie können alle Werte von Ergebnis und Filterauswahl sammeln.
var object = { choices: [{ choice: "a" }, { choice: "b" }, { choice: "c" }, { choice: "d" }, { choice: "e" }, { choice: "f" }, { choice: "g" }], results: [{ result: ["a", "b", "c"] }, { result: ["a", "b", "d"] }, { result: ["a", "b", "e"] }] },
hash = Object.create(null),
notIn = [];
object.results.forEach(function (a) {
a.result.forEach(function (b) {
hash[b] = true;
});
});
notIn = object.choices.filter(function (a) {
return !hash[a.choice];
});
console.log(notIn);
.as-console-wrapper { max-height: 100% !important; top: 0; }
ES6 mit Set
var object = { choices: [{ choice: "a" }, { choice: "b" }, { choice: "c" }, { choice: "d" }, { choice: "e" }, { choice: "f" }, { choice: "g" }], results: [{ result: ["a", "b", "c"] }, { result: ["a", "b", "d"] }, { result: ["a", "b", "e"] }] },
results = object.results.reduce((s, a) => new Set([...s, ...a.result]), new Set),
notIn = object.choices.filter(a => !results.has(a.choice));
console.log(notIn);
.as-console-wrapper { max-height: 100% !important; top: 0; }
+1 für die '' 'Set''' Lösung, möglicherweise für' '' '' '' 'statt' '' var''' wäre besser für eine vollständige ES6-Lösung? – Anis
@Anis, eigentlich ist der Umfang nicht das Problem. –
stimme ich völlig zu, und da es egal ist, dachte ich nur, dass in diesem Fall ein besserer Standard wäre. – Anis
Ich bin nicht sicher, ob Sie nach generischen Implementierungsideen fragen, oder nach Hinweisen, wie Sie es in Javascript implementieren können. Ich werde für die allgemeine Idee gehen. Sie können einfach eine set verwenden, um alle möglichen Ergebnisse zu speichern, dann durch die Auswahlmöglichkeiten iterieren und für jede Auswahl prüfen, ob sie in der Menge enthalten ist. Wenn nicht, können Sie die Aktion ausführen, die Sie möchten, wie Sie es verstecken, was auch immer das bedeutet.
Sie können filter()
auf data.choices und dann some()
und includes()
verwenden, um zu überprüfen, ob in einigen der Objekte im Ergebnisarray eine Auswahl vorhanden ist.
var data = {"choices":[{"choice":"a"},{"choice":"b"},{"choice":"c"},{"choice":"d"},{"choice":"e"},{"choice":"f"},{"choice":"g"}],"results":[{"result":["a","b","c"]},{"result":["a","b","d"]},{"result":["a","b","e"]}]}
data.choices = data.choices.filter(function(o, i) {
var check = data.results.some(e => e.result.includes(o.choice))
return check;
})
console.log(data)
var choices = {choices:[{choice:"a"},{choice:"b"},{choice:"c"},{choice:"d"},{choice:"e"},{choice:"f"},{choice:"g"}],results:[{result:["a","b","c"]},{result:["a","b","d"]},{result:["a","b","e"]}]},
elems1 = choices.results.map(v => v.result).reduce((a,b) => a.concat(b)),
filtered = [...new Set(elems1)];
choices.choices = choices.choices.filter(v => filtered.some(c => c == v.choice));
console.log(choices);
Bitte fügen Sie eine Erklärung hinzu, warum/wie dieser Code dem OP hilft. Dies wird helfen, eine Antwort zu liefern, von der zukünftige Zuschauer lernen können. Weitere Informationen finden Sie unter [diese Meta-Frage und ihre Antworten] (http://meta.stackoverflow.com/q/256359/215552). Dies scheint ein Thema hier zu werden, @Kinduser ... –
@MikeMcCaughan Eigentlich möchte ich nichts schreiben, weil dies zu kompliziert ist ... Ich werde auf Nina Antwort warten und werde mich entscheiden, zu gehen oder meine zu löschen Antworten. Wenn ich mich entscheide, es zu verlassen, werde ich jeden Schritt beschreiben. –
@Kinduser, Sie könnten mit 'Set' reduzieren, anstatt die Werte zu mappen. –
- 1. Array von Strings mit einem anderen Array vergleichen
- 2. Pass Array als einzelne Elemente in einem anderen Array
- 3. in einem anderen Array
- 4. Python Index aller Array-Elemente in einem anderen Array finden
- 5. Wie Elemente in einem Array zu finden, basierend auf einer Suche von einem anderen Array
- 6. Ramda: Objekte aus dem Array erhalten, indem in einem anderen Array mit jedem Elemente zu vergleichen
- 7. Wie Array-Werte in einem anderen Array
- 8. jquery Aktualisierungseigenschaft in einem Array von einem anderen Array
- 9. Ersatzvariable in einem Array von einem anderen Array
- 10. Filter Array von einem anderen Array (AngularJS)
- 11. Filter Array von einem anderen Array
- 12. Daten aus einem Array entfernen, es zu einem anderen Array zu vergleichen
- 13. Elemente in einem Array zählen und vergleichen, Javascript
- 14. Vergleichen Sie Elemente in einem Array für Duplikate
- 15. Wie in einem anderen Array (Android Studio)
- 16. Zählen Elemente in einem Array
- 17. Count Elemente in einem Array von Eigenschaftswert
- 18. Return-Array, wenn Werte auf einem Array in einem anderen
- 19. Einige Strings in einem Array entsprechen einem anderen Array
- 20. Summe die Elemente eines Array-Schlüssel in einem mehrdimensionalen Array
- 21. Elemente aus einem Array entfernen, wenn eine Übereinstimmung in einem anderen Array in Javascript
- 22. Lodash-Methode, um zu überprüfen, ob alle Elemente in einem Array in einem anderen Array sind
- 23. Elemente in einem Array von Arrays zählen?
- 24. Kopieren von Elementen von einem Zeichen-Array zu einem anderen
- 25. Für jeweils drei Elemente in einem Array, verketten Sie eine Zeichenfolge aus einem anderen Array
- 26. Wie Elemente in einem Array nach dem Filtern von anderen Array mit Javascript>
- 27. Kopieren bestimmter Elemente von JSON Array zu einem anderen
- 28. Array sortieren und die Änderungen in einem anderen Array widerspiegeln
- 29. Wie kann ich bestimmte in einem Array definierte Indezes aus einem anderen Array in Ruby
- 30. Wie Elemente in einem Array schieben
was bedeutet * verstecken *? Brauchen Sie ein Array mit dem Ergebnis? –
die Frage ist unklar, der gepostete Code ist nur ein Schnitt Stück Code mit keinem Anfang und Ende (gewählt, um zu schließen) – RomanPerekhrest