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.
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);
pourquoi ne pas utiliser réduire ?
_.reduce(selected,function(result,a){
return _.intersection(result,a);
});
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);
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).