0
votes

JS - vérifie si le tableau n'a pas de valeur mais une valeur spécifiée

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?


0 commentaires

5 Réponses :


1
votes

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)


1 commentaires

manière cool mais je pense que cette méthode boucle sur tous les éléments aussi.



3
votes

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'));


1 commentaires

@SalmanA every () renverra false dès qu'il trouvera un élément qui ne correspondra pas aux critères définis par le rappel.



1
votes

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


0 commentaires

0
votes

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.


0 commentaires

1
votes

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


0 commentaires