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.

-1
LLlAMnYP 15 avril 2018 à 21:08

4 réponses

Meilleure réponse

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)

2
T.J. Crowder 15 avril 2018 à 18:11

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]));
1
Nina Scholz 15 avril 2018 à 18:28

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));
0
raul.vila 15 avril 2018 à 18:13

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.

2
Bergi 15 avril 2018 à 18:24