1
votes

Existe-t-il un équivalent de «Array.None» dans JS?

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:

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


0 commentaires

3 Réponses :


8
votes

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)


0 commentaires

0
votes

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)


0 commentaires

1
votes

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.


3 commentaires

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).