Il y a une question similaire pour LINQ: existe-t-il un équivalent de None()
dans LINQ?
Il existe des méthodes booléennes sur les collections / tableaux:
Array.some
(similaire à linq.Any
)Array.every
(similaire à linq.All
)Puis-je vérifier si aucun élément du tableau ne correspond à un rappel de fonction donné
Une solution de contournement possible consiste à .filter
, puis à vérifier .length
et à s'assurer qu'il est égal à zéro:
let arr = ["a","b","c"] // make sure that no item in array = "b" let noBs = arr.filter(el => el === "b").length === 0
3 Réponses :
Comme le conclut logiquement l'exemple linq
None
n'est identique à!Any
, vous pouvez donc définir votre propre méthode d'extension comme suit:
let arr = ["a","b","c"] let noBs = arr.none(el => el === "b")
Et puis appelez comme ceci:
Object.defineProperty(Array.prototype, 'none', { value: function (callback) { return !this.some(callback) } });
Ou si vous souhaitez étendre Array.proto
comme ceci:
let arr = ["a","b","c"] let noBs = none(arr, el => el === "b")
Puis appelez comme ceci:
let none = (arr, callback) => !arr.some(callback)
J'ai aimé l'approche @KyledMit. Dans le même ordre d'idées, utiliser findIndex
est un autre moyen. (la find
peut ne pas être fiable car nous ne pouvons pas vérifier la valeur de retour).
const arr = ["a","b","c"] const noBs = arr.findIndex(el => el === "b") < 0; console.log(noBs)
Pas pour le moment
En ce moment, j'utilise un Array.some()
et je Array.some()
le tout
Personnellement, je pense qu'une fonction Array.none serait géniale
Vous pouvez demander qu'il soit ajouté à la prochaine version d'ECMA. Cela ressemble un peu à un processus pour dire le moins, mais si nous voulions ajouter cela à l'ECMA, ce serait la voie.
Attention: not every
n'est pas pareil à none
!
oh oui je pense que je voulais dire! Array.any Merci d'avoir souligné cela, mettra à jour ma réponse
Je pense que vous voulez dire Array.some
(à ma connaissance, il n'y a pas any
alias dans JS).