Array.prototype.some()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
Die some()
-Methode von Array
-Instanzen prüft, ob mindestens ein Element im Array den Test besteht, der durch die bereitgestellte Funktion implementiert wurde. Sie gibt true
zurück, wenn sie im Array ein Element findet, für das die bereitgestellte Funktion true
zurückgibt; andernfalls gibt sie false
zurück. Sie verändert das Array nicht.
Probieren Sie es aus
Syntax
some(callbackFn)
some(callbackFn, thisArg)
Parameter
callbackFn
-
Eine Funktion, die für jedes Element im Array ausgeführt wird. Sie sollte einen truthy Wert zurückgeben, um anzuzeigen, dass das Element den Test besteht, und einen falsy Wert, wenn nicht. Die Funktion wird mit den folgenden Argumenten aufgerufen:
thisArg
Optional-
Ein Wert, der als
this
beim Ausführen voncallbackFn
verwendet wird. Siehe iterative Methoden.
Rückgabewert
false
, es sei denn callbackFn
gibt einen truthy Wert für ein Array-Element zurück, in diesem Fall wird sofort true
zurückgegeben.
Beschreibung
Die some()
-Methode ist eine iterative Methode. Sie ruft eine bereitgestellte callbackFn
-Funktion einmal für jedes Element in einem Array auf, bis callbackFn
einen truthy Wert zurückgibt. Wenn ein solches Element gefunden wird, gibt some()
sofort true
zurück und stoppt die Iteration durch das Array. Andernfalls, wenn callbackFn
für alle Elemente einen falsy Wert zurückgibt, gibt some()
false
zurück. Lesen Sie den Abschnitt über iterative Methoden für weitere Informationen darüber, wie diese Methoden allgemein funktionieren.
some()
verhält sich wie der "es existiert"-Quantor in der Mathematik. Insbesondere für ein leeres Array gibt es false
für jede Bedingung zurück.
callbackFn
wird nur für Array-Indizes aufgerufen, die Werte zugewiesen haben. Es wird nicht für leere Plätze in sparsely besetzten Arrays aufgerufen.
some()
verändert das Array, auf dem es aufgerufen wird, nicht, aber die als callbackFn
bereitgestellte Funktion kann es. Beachten Sie jedoch, dass die Länge des Arrays vor dem ersten Aufruf von callbackFn
gespeichert wird. Daher:
callbackFn
wird keine Elemente besuchen, die über die ursprüngliche Länge des Arrays hinaus hinzugefügt werden, wenn der Aufruf vonsome()
begann.- Änderungen an bereits besuchten Indizes führen nicht dazu, dass
callbackFn
erneut für sie aufgerufen wird. - Wenn ein existierendes, aber noch nicht besuchtes Element des Arrays von
callbackFn
geändert wird, wird dessen Wert dercallbackFn
als der Wert zum Zeitpunkt übergeben, an dem dieses Element besucht wird. Gelöschte Elemente werden nicht besucht.
Warnung: Gleichzeitige Änderungen der oben beschriebenen Art führen häufig zu schwer verständlichem Code und sollten im Allgemeinen vermieden werden (außer in speziellen Fällen).
Die some()
-Methode ist generisch. Sie erwartet nur, dass der this
-Wert eine length
-Eigenschaft und integer-schlüsselbasierte Eigenschaften hat.
Beispiele
Testen des Werts von Array-Elementen
Das folgende Beispiel prüft, ob ein beliebiges Element im Array größer als 10 ist.
function isBiggerThan10(element, index, array) {
return element > 10;
}
[2, 5, 8, 1, 4].some(isBiggerThan10); // false
[12, 5, 8, 1, 4].some(isBiggerThan10); // true
Testen von Array-Elementen mit Pfeilfunktionen
Pfeilfunktionen bieten eine kürzere Syntax für den gleichen Test.
[2, 5, 8, 1, 4].some((x) => x > 10); // false
[12, 5, 8, 1, 4].some((x) => x > 10); // true
Überprüfen, ob ein Wert im Array existiert
Um die Funktion der includes()
-Methode nachzuahmen, gibt diese benutzerdefinierte Funktion true
zurück, wenn das Element im Array existiert:
const fruits = ["apple", "banana", "mango", "guava"];
function checkAvailability(arr, val) {
return arr.some((arrVal) => val === arrVal);
}
checkAvailability(fruits, "grapefruit"); // false
checkAvailability(fruits, "banana"); // true
Konvertieren eines beliebigen Werts in einen Booleschen Wert
const TRUTHY_VALUES = [true, "true", 1];
function getBoolean(value) {
if (typeof value === "string") {
value = value.toLowerCase().trim();
}
return TRUTHY_VALUES.some((t) => t === value);
}
getBoolean(false); // false
getBoolean("false"); // false
getBoolean(1); // true
getBoolean("true"); // true
Verwenden des dritten Arguments von callbackFn
Das array
-Argument ist nützlich, wenn Sie auf ein anderes Element im Array zugreifen möchten, insbesondere wenn Sie keine vorhandene Variable haben, die auf das Array verweist. Das folgende Beispiel verwendet zuerst filter()
, um die positiven Werte zu extrahieren, und dann some()
, um zu überprüfen, ob das Array streng steigend ist.
const numbers = [3, -1, 1, 4, 1, 5];
const isIncreasing = !numbers
.filter((num) => num > 0)
.some((num, idx, arr) => {
// Without the arr argument, there's no way to easily access the
// intermediate array without saving it to a variable.
if (idx === 0) return false;
return num <= arr[idx - 1];
});
console.log(isIncreasing); // false
Verwenden von some() auf sparsely besetzten Arrays
somme()
wird das Prädikat nicht auf leere Plätze anwenden.
console.log([1, , 3].some((x) => x === undefined)); // false
console.log([1, , 1].some((x) => x !== 1)); // false
console.log([1, undefined, 1].some((x) => x !== 1)); // true
Aufrufen von some() auf Nicht-Array-Objekten
Die some()
-Methode liest die length
-Eigenschaft von this
und greift dann auf jede Eigenschaft zu, deren Schlüssel eine nicht negative ganze Zahl kleiner als length
ist, bis sie alle zugegriffen wurden oder callbackFn
true
zurückgibt.
const arrayLike = {
length: 3,
0: "a",
1: "b",
2: "c",
3: 3, // ignored by some() since length is 3
};
console.log(Array.prototype.some.call(arrayLike, (x) => typeof x === "number"));
// false
Spezifikationen
Specification |
---|
ECMAScript Language Specification # sec-array.prototype.some |
Browser-Kompatibilität
BCD tables only load in the browser