Object.keys
um alle Eigenschaftsnamen des Objekts zu erhalten und alle Werte zu filtern, die genau oder teilweise mit der angegebenen Zeichenfolge übereinstimmen.
function filterByValue(array, string) {
return array.filter(o =>
Object.keys(o).some(k => o[k].toLowerCase().includes(string.toLowerCase())));
}
const arrayOfObject = [{
name: 'Paul',
country: 'Canada',
}, {
name: 'Lea',
country: 'Italy',
}, {
name: 'John',
country: 'Italy'
}];
console.log(filterByValue(arrayOfObject, 'lea')); // [{name: 'Lea', country: 'Italy'}]
console.log(filterByValue(arrayOfObject, 'ita')); // [{name: 'Lea', country: 'Italy'}, {name: 'John', country: 'Italy'}]
Sie können auch nach einem bestimmten Schlüssel filtern, z. B.
Object.keys(o).some(k => o.country.toLowerCase().includes(string.toLowerCase())));
Jetzt können Sie einfach prüfen, Array zählen nach gefiltert, um zu überprüfen, Wert enthält oder nicht.
Ich hoffe, es ist hilfreich.
65 Stimmen
Gerade getestet: Ihr Weg ist tatsächlich der schnellste für alle Browser: jsperf.com/find-element-in-obj-vs-array/2 (abgesehen von der Vorabspeicherung von a.length in einer Variablen), während die Verwendung von indexOf (wie in $.inArray) viel langsamer ist
23 Stimmen
Viele haben geantwortet, dass die Array#indexOf ist Ihre beste Wahl hier. Aber wenn Sie etwas wollen, das korrekt in Boolean umgewandelt werden kann, verwenden Sie dies:
~[1,2,3].indexOf(4)
wird 0 zurückgeben, was als falsch ausgewertet wird, während~[1,2,3].indexOf(3)
wird -3 zurückgeben, was als wahr ausgewertet wird.13 Stimmen
~
ist nicht das, was Sie für die Konvertierung in einen Booleschen Wert verwenden wollen, dafür brauchen Sie!
. Aber in diesem Fall wollen Sie die Gleichheit mit -1 prüfen, damit die Funktion nicht endetreturn [1,2,3].indexOf(3) === -1;
~
nicht binär ist, wird jedes Bit des Wertes einzeln invertiert.1 Stimmen
IE9 unterstützt
indexOf()
gemäß w3schools.com/jsref/jsref_indexof_array.asp . Wenn ältere Browser besser Ansatz ist, zu definierenprototype
paraindexOf()
Funktion, wie sie in Array.indexOf im Internet Explorer19 Stimmen
@Iordvlad
[1,2,3].indexOf(4)
wird tatsächlich Rückgabe -1 . Wie @mcfedr feststellte,~
ist die bitweise-NOT-Operator siehe ES5 11.4.8. Da die binäre Darstellung von-1
nur aus 1en besteht, ist sein Komplement0
die als falsch ausgewertet wird. Das Komplement einer beliebigen anderen Zahl ist ungleich Null, also wahr. Also,~
funktioniert einwandfrei und wird häufig in Verbindung mitindexOf
.9 Stimmen
Der Titel ist irreführend. Wo ist die
[[1,2],[3,4]].includes([3,4])
?1 Stimmen
@brad, wenn ich zum ersten Mal lesen Sie Ihre Frage, ich konnte nicht verstehen, Ihre Idee, ein Objekt hier ist Javascript-Objekt oder ein primitiver Wert. Angenommen, ich habe ein Array:
const arr = [1, 2, 3, { foo: 1}];
. Undarr.includes(1) // true
sondernarr.includes({ foo: 1 }) //false
1 Stimmen
Wenn die Elemente in Ihrem Array Objekte sind dann schauen Sie sich este Antwort, die die
some
Funktion.0 Stimmen
let arr = ['apple','banana', 1, 2, 4] if (!arr.includes('banana') ) console.log('No') else console.log('Yes')
0 Stimmen
Console.log(['joe', 'jane', 'mary'].includes('jane'));