Underscore: _. sin aceptar la matriz como segundo argumento

Creado en 21 ene. 2011  ·  10Comentarios  ·  Fuente: jashkenas/underscore

La definición actual de _. Sin aceptar matriz como primer argumento y luego cualquier número de argumentos siguientes. Sé que puede ser complicado, pero sería útil si pudiera pasar otra matriz como argumento.

La nueva funcionalidad funcionaría como
_.sin ([1,2,3], [1, 2])
devoluciones
[3]

Hasta donde yo sé, _ .without no funciona en profundidad, por lo que es posible que no sea demasiado complicado -
_.sin ([1,2,3, [1]], [1], 1)
devoluciones
[2, 3, [1]]

enhancement wontfix

Comentario más útil

Para aquellos que encuentran su camino aquí .... _.difference ([0, 1, 3, 9], [1, 3]); // => [0, 9]

De: http://stackoverflow.com/questions/5722254/underscore-js-is-there-a-function-that-produces-an-array-thats-the-difference

Todos 10 comentarios

Afortunadamente, JavaScript tiene una forma incorporada de pasar una función cualquier número de argumentos.

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/function/apply

_.without.apply(_, [1, 2, 3], [1, 2])

¡Cosa segura! Estúpido de mí, cómo pude olvidar ...

Parece que necesita llamarse así

_.without.apply(_, [[1,2,3], 1, 2])

Lo que lo hace un poco complicado (deshaciendo la matriz de exclusión con la matriz original).

ACTUALIZACIÓN: Creé un nuevo ticket para este problema: https://github.com/documentcloud/underscore/issues/issue/118

Tengo que estar de acuerdo con los dos: con Jeremy por mantener la coherencia de _.without signature y con Ondrey por encontrar la solución alternativa propuesta por Jeremy un poco pirateada (no parece funcionar para mí también).

Por lo tanto, quiero proponer la introducción de dos nuevas funciones de subrayado: _.difference(*arrays) y _.symdifference(a,b) : la diferencia encontraría todos los elementos de la primera matriz que no aparecen en las otras matrices suministradas, donde _.symdifference () devolvería los elementos que están en a o en b pero no en ambos.

La "inspiración" para estas funciones proviene del tipo de datos del conjunto de Python y, en mi humilde opinión, no deberían limitarse solo a matrices, ya que también son aplicables a objetos.

Solo una forma rápida de escribirlo con guión bajo: _.without.apply (_, [x] .concat (y)), devolverá una matriz de valores en x sin los valores en y.

La respuesta de @rubenstolk funciona, excepto que no comentó su código, por lo que los guiones bajos se interpretan en cursiva. ¡Para las generaciones futuras! : vagón_viajero:: cohete:: arcoiris:: manos_alzadas:

_.without.apply(_, [originalArray].concat(removeArray));

¡Creo que Github no estaba haciendo eso hace 2 años @reggi!

Para aquellos que encuentran su camino aquí .... _.difference ([0, 1, 3, 9], [1, 3]); // => [0, 9]

De: http://stackoverflow.com/questions/5722254/underscore-js-is-there-a-function-that-produces-an-array-thats-the-difference

Sé que esto está cerrado, pero el operador de propagación de ES6 ayudará con esto;)

Para cualquiera que no quiera buscar el operador de propagación ES6 que mencionó @agwidarsito , lo que está diciendo es que puede hacer esto en ES6:

const items = [1,2,3,4];
const itemsToRemove = [3,4,5];
const result = _.without(items, ...itemsToRemove);
// result is [1,2]

¡Gracias @addisonbgross!

¿Fue útil esta página
0 / 5 - 0 calificaciones