Ma question est mieux illustrée par un exemple.
Existe-t-il un moyen d'utiliser la syntaxe comme
array.reduce(and)
Au lieu de
array.reduce((a, b) => a && b)
En Javascript?
Des questions similaires se posent pour d'autres opérateurs binaires, tels que || + - *
et bien d'autres. Une question similaire existe pour l'opérateur !
, par exemple array.map(not)
.
MODIFIER:
Toutes mes excuses, si elles ne sont pas suffisamment claires. Je voulais demander si JS a des alias intégrés réels pour les opérateurs mentionnés, comme certaines autres langues. Je suis bien conscient que je peux définir mes propres fonctions pour ce faire.
4 réponses
En effet, oui - on les appelle des fonctions . :-)
const and = (a, b) => a && b;
let array = [true, false, true];
console.log(array.reduce(and)); // false
array = [true, true, true];
console.log(array.reduce(and)); // true
J'ai utilisé une fonction flèche là-bas, mais cela pourrait être n'importe quel type de fonction.
JavaScript n'a aucun autre moyen de le faire, mais les fonctions font bien le travail, fournissant une sémantique réutilisable pour les opérations courantes.
Re votre édition
Je voulais demander si JS a de réels alias intégrés pour les opérateurs mentionnés, comme certains autres langages.
Non, mais le code que vous avez montré n'utiliserait de toute façon pas d'alias. Un alias aurait ressemblé à ceci: array.reduce((a, b) => a and b)
En fait, il n'y a que deux méthodes pour &&
et ||
, en utilisant Array#every
ou Array#some
with Boolean
comme rappel.
Pour toutes les autres opérations, vous avez besoin d'une fonction propre.
function checkAnd(array) {
return array.every(Boolean);
}
function checkOr(array) {
return array.some(Boolean);
}
console.log(checkAnd([true, true, true]));
console.log(checkAnd([true, false, true]));
console.log(checkAnd([false, false, false]));
console.log(checkOr([true, true, true]));
console.log(checkOr([true, false, true]));
console.log(checkOr([false, false, false]));
Vous pouvez définir les fonctions:
function and(x, y) {
return x && y;
}
function or(x, y) {
return x || y;
}
bool_values = [true, true, false];
console.log("and", bool_values.reduce(and));
console.log("or", bool_values.reduce(or));
function add(x, y) {
return x + y;
}
function multiply(x, y) {
return x + y;
}
num_values = [1, 2.5, 3]
console.log("and", num_values.reduce(add));
console.log("or", num_values.reduce(multiply));
Les seuls opérateurs binaires qui ont des équivalents de fonction intégrés sont **
(Math.pow
) et in
(Reflect.has
).
Concernant spécifiquement array.reduce(and, true)
et array.reduce(or, false)
, vous pouvez utiliser every
et some
avec la fonction d'identité comme rappel, ou Boolean
pour utiliser une fonction intégrée.
Questions connexes
De nouvelles questions
javascript
Pour des questions concernant la programmation dans ECMAScript (JavaScript / JS) et ses divers dialectes / implémentations (hors ActionScript). Veuillez inclure toutes les balises pertinentes dans votre question; par exemple, [node.js], [jquery], [json], etc.