2011-04-19 15 views
17

¿Busca una función en underscore.js que tome 2 matrices y devuelva una nueva matriz de valores únicos? Algo así como _sinunderscore.js - ¿Hay una función que produce una matriz que es la diferencia de dos matrices?

_.without([0, 1, 3, 9], [1, 3]); 

me gustaría => [0,9] volvió

Parece 2º argumento de _sin es una lista de valores, no una matriz. ¿Alguien por ahí sabe si el subrayado tiene la función específica que estoy buscando? O puedo tomar una matriz existente y encubrirla a los valores que la función espera.

Gracias,
~ ck en San Diego

+0

gracias por la edición Jeff. error de tipografía. – Hcabnettek

Respuesta

13

_.without.apply(_, [arr1].concat(arr2))

[[0, 1, 3, 9]].concat([1, 3]) es [[0, 1, 3, 9], 1, 3];

_.without.apply(_, [[0, 1, 3, 9], 1, 3]) es _.without([0, 1, 3, 9], 1, 3)

Tienes un buen método perfectamente _.without. Así que simplemente convierta una matriz en una lista de valores que puede pasar a una función. Este es el propósito de Function.prototype.apply

+0

Ambas soluciones son correctas, sin embargo, me gusta que hagas la conversión al estilo de argumentos que la función necesita. ¡¡¡Bien hecho!!! – Hcabnettek

+3

Esto está en desuso, debería usar _.difference – adriantoine

4
var result = _.reject([0, 1, 3, 9], function(num) { 
       return _.include([1, 3], num); 
      }); 
+0

¿Alguna descripción de lo que está haciendo su fragmento? – kaiser

+0

@kaiser: 'reject' toma una lista y una función que actúa como una" prueba de verdad "para preguntar si cada elemento debe ser rechazado. En este caso, esa función se especifica para verificar si el artículo dado está incluido en la lista '[1, 3]'. Si lo es, devolverá 'true', y' reject' rechazará el valor. De vuelta en el nivel superior, 'reject' recibe la lista original y devolverá una nueva lista sin ningún valor rechazado. –

40

La función _.difference debe darle lo que usted está buscando:

_.difference([0, 1, 3, 9], [1, 3]); // => [0, 9] 
+1

Una función que no veo es una que en el caso de ([0,1,3,9], [1,3,12]) da [0,9, 12]. Creo que eso es "disyunción" – grantwparks

+2

esta debería ser la respuesta aceptada –

Cuestiones relacionadas