0
votes

JavaScript: Utilisez Réduire () pour construire une intersection de la fonction qui compare les tableaux d'entrée; retour des éléments intersectifs seulement

Construisez une intersection de la fonction qui compare les matrices d'entrée et renvoie un nouveau tableau avec des éléments trouvés dans toutes les entrées.

Ma solution fonctionne mais c'est très encombrant: xxx

Je voudrais aussi utiliser réduire () dans ma solution. Quelqu'un peut-il fournir une solution de code alternative qui utilise réduire () et est plus efficace s'il vous plaît?

J'apprécierais que vous puissiez commenter ce que chaque ligne de votre code fait pour m'aider à comprendre.


0 commentaires

3 Réponses :


2
votes

Vous pouvez utiliser réduire comme ceci: xxx

le filtre pièce effectue l'intersection de deux tableaux donnés a < / code> et B . La pièce Réduire Applique cette logique en prenant la matrice suivante à partir de l'entrée et en l'intersectant avec le résultat précédent.

Ce n'est cependant pas la solution la plus optimale cependant. Utilisez un définir pour de meilleures performances lorsque vous utilisez d'énormes tableaux. xxx

Pour plus d'informations, reportez-vous à la réponse à Cette question - Traitement de deux tableaux comme entrée.


2 commentaires

Je suis un peu confus: quel est le code ci-dessous? A.Filter (C => B.Some (D => C === D))


@ Pinenuts0, filtre iTère le tableau A et renvoie un nouveau tableau contenant les valeurs pour lesquelles l'expression B.Some (D => C === d) est vrai. B.Some ITERATES L'AUTRE, B , Array et retourne true quand il trouve au moins sur l'élément qui satisfait c === d .



-1
votes

Vous pouvez utiliser filtre () code> sur n'importe lequel de la sous-réseau. Et utiliser tous les () code> sur le tableau principal.

p>

const arr1 = [5, 10, 15, 20];
const arr2 = [15, 88, 1, 5, 7];
const arr3 = [1, 10, 15, 5, 20];

const intersection = arr => {
  let [first,...rest] = arr;
  rest = rest.map(x => new Set(x));
  return first.filter(x => rest.every(a => a.has(x)));


} 
console.log(intersection([arr1,arr2,arr3]))


4 commentaires

Merci; Quel est le code ci-dessous? x => arr.yevery (A => A.Inclut (x))


@ Pinenuts0 j'ai ajouté une explication. Demandez si vous ne comprenez pas une chose.


Etrange, la question portait sur l'utilisation de réduire , et cette réponse est acceptée. Je suis confus.


@Trincot bien je ne peux pas pourquoi est-ce tellement? Parfois, de nouveaux utilisateurs ne connaissent pas beaucoup sur les méthodes de réseau de commandes supérieures. Ils connaissent juste le nom de l'un d'entre eux et ils demandent cela dans la question. Ils n'ont aucune idée de la plupart des méthodes appropriées à leur usage.



0
votes

Vous pouvez prendre le premier tableau d'index et le faire correspondre à tous les autres matrices et la valeur de filtrage basée en conséquence

p>

const arr1 = [5, 10, 15, 20];
const arr2 = [15, 88, 1, 5, 7];
const arr3 = [1, 10, 15, 5, 20];

const intersection = (arr) => {
  let [a,...rest] = arr
  return a.filter(v=> rest.every(val => val.includes(v)))
}

console.log(intersection([arr1, arr2, arr3]));


0 commentaires