J'ai un tableau qui peut contenir de nombreuses valeurs. Ce dont j'ai besoin, c'est d'un moyen de vérifier si toutes les valeurs de ce tableau correspondent à la valeur souhaitée.
Voici ce que j'ai fait jusqu'à présent:
const arr = ['foo', 'foo', 'bar', 'foo', 'baz', 'foo', 'qux']; // I need to see if all values in arr is eqaul to 'foo' const mappedArr = arr.map(item => item === 'foo'); if (!mappedArr.includes(false)) { console.log('my condition is satisfied'); } else { console.log('Nope! something else is in there'); }
Mais cela nécessite une boucle sur tous les éléments et en convertissant le tableau en un tableau "vrai / faux" et en vérifiant le nouveau tableau pour y inclure une valeur.
Ce qui ne semble pas être une bonne approche en cas de grandes listes. Ce serait bien mieux si je pouvais briser cette boucle dès que j'ai rencontré le premier élément qui ne correspond pas.
Y a-t-il une meilleure façon de faire cela?
5 Réponses :
Utilisez le filtre au lieu de la carte
const arr = ['foo', 'foo', 'bar', 'foo', 'baz', 'foo', 'qux']; arr.filter(e=>e=='foo').length==arr.length?console.log(true):console.log(false)
manière cool mais je pense que cette méthode boucle sur tous les éléments aussi.
Pourquoi quelqu'un écrirait-il une logique aussi complexe alors qu'il n'y a .every ()
?
const arr1 = ['foo', 'foo', 'bar', 'foo', 'baz', 'foo', 'qux']; const arr2 = ['foo', 'foo', 'foo', 'foo']; const checker = (arr, str) => arr.every(s => s === str); console.log(checker(arr1, 'foo')); console.log(checker(arr2, 'foo'));
@SalmanA every ()
renverra false
dès qu'il trouvera un élément qui ne correspondra pas aux critères définis par le rappel.
Vous recherchez Array.prototype.some
arr.some(element => element !== 'foo') !== false
Il retournera true si l'un des éléments n'est pas égal à 'foo '
,
false s'ils sont tous égaux à 'foo'
.
C'est ce que fait la carte. La fonction map renvoie le tableau des valeurs renvoyées. use every - La méthode every () teste si tous les éléments du tableau passent le test implémenté par la fonction fournie
. Vous retournez l'élément de valeur booléenne === 'foo' et vous obtenez donc le tableau de booléens.
Vous devez utiliser Array .prototype.every ()
let arr = ['foo', 'foo', 'bar', 'foo', 'baz', 'foo', 'qux']; console.log(arr.every(elm => elm === 'foo')); //false arr = arr.map(elm => 'foo'); //changing every element to 'foo' for testing console.log(arr.every(elm => elm === 'foo')); //true