Me gusta usar .every() y .some() en javascript y encontré una diferencia en su comportamiento y no vi una explicación de por qué en MDN. Según MDN, si ejecuta .every() en una matriz vacía, el resultado es verdadero porque en matemáticas todos los elementos del conjunto vacío coincidirán con una condición. Pero .some() devolverá falso cuando se ejecute en una matriz vacía.
const myArray = []; const ev = myArray.every( elem => { elem === 'this is foobared'; }); const so = myArray.some( elem => { elem === 'this is foobared'; }); // ev is true // so is falseSoy un oso de muy poco cerebro, pero parece que si cada elemento del conjunto vacío coincide con la condición, entonces algunos de los elementos coinciden con la condición porque si todos los elementos coinciden, .some() será verdadero.
const myArray = [1, 2, 3, 4]; const ev = myArray.every( elem => { return elem < 10; }); const so = myArray.some( elem => { return elem < 10; }); // ev is true // so is true¿Hay alguna lógica detrás de esto?
Gracias por cualquier explicación.
La razón de esto es que permite que la propiedad asociativa de estas operaciones funcione correctamente.
Esta propiedad requiere las siguientes equivalencias:
array1.every(condition) && array2.every(condition) == array1.concat(array2).every(condition); array1.some(condition) || array2.some(condition) == array1.concat(array2).some(condition); Reemplace array2 con una matriz vacía, y verá que definir [].every(condition) como true y [].some(condition) como false garantizará que se logren las equivalencias en los casos límite.
Esto es similar a la forma en que true es el valor de identidad para el operador && y false es la identidad para || operador.
Fácilmente puedes memorizar every es [Y &&] y
some son [O ||]
déjame mostrarte un ejemplo de matriz de objetos.
Puede leer ¿Cuál es la diferencia entre los métodos every() y some()?
// Example let users = [ {id:1, type: 'student'}, {id: 2, type: 'student'} ]; let isEveryStudent = users.every(user => user.type === 'student'); console.log('isEveryStudent', isEveryStudent); // ```isEveryStudent``` is true because All users are student users = [ {id:1, type: 'student'}, {id: 2, type: 'officer'} ]; isEveryStudent = users.every(user => user.type === 'student'); console.log('isEveryStudent', isEveryStudent); // ```isEveryStudent``` is false because one of the user is officer users = [ {id:1, type: 'student'}, {id: 2, type: 'officer'} ]; const isSomeOfficer = users.some(user => user.type === 'officer'); console.log('isSomeOfficer', isSomeOfficer); // ```isSomeOfficer``` is true because one of the user is officer