web-dev-qa-db-fra.com

Comment effectuer une union ou une intersection sur un tableau de tableaux avec Underscore.js

J'ai un tableau de tableaux:

var selected = [[1, 4, 5, 6], [1, 2, 3, 5, 7], [1, 4, 5, 6], [1, 7]];

Underscore.js a des méthodes pratiques d’union et d’intersection, mais elles permettent de transmettre chaque tableau individuellement en tant qu’arguments. 

Comment pourrais-je m'y prendre si le nombre de tableaux sur lesquels les opérations d'ensemble doivent être effectuées est arbitraire?

Cette question adresse quelque chose de similaire mais il s’agit d’un tableau contenant des objets.

32
Nandeep Mali

On peut utiliser apply pour passer un nombre arbitraire d'arguments à une méthode.

Pour l'union:

// Outputs [1, 4, 5, 6, 2, 3, 7]
var selectedUnion = _.union.apply(_, selected);

Pour intersection:

// Outputs [1]
var selectedIntersection = _.intersection.apply(_, selected);
59
Nandeep Mali

pourquoi ne pas utiliser réduire ?

_.reduce(selected,function(result,a){
    return _.intersection(result,a);
});
4
Aladdin Mhemed

var centrifuge = _.spread(_.intersection);

alert(centrifuge([
  [1, 4, 5, 6],
  [1, 2, 3, 5, 7],
  [1, 4, 5, 6],
  [1, 7]
]))


alert(centrifuge([
  [1, 4, 5, 6],
  [1, 2, 4, 6, 3, 5, 7]
]))
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.12.0/lodash.js"></script>

var centrifugeuse = .spread (. intersection);

4
duality

Le moyen le plus simple que j'ai pu trouver: _.union(...arrays).

Cela fonctionne dans Underscore.js et dans Lodash.

Le seul inconvénient majeur auquel je puisse penser est qu’il utilise une syntaxe de propagation de tableau , qui ne fonctionnera pas dans Internet Explorer (à moins que vous utilisiez un outil comme Babel pour le traduire).

0
Elias Zamaria