Underscore: _. без принятия массива в качестве второго аргумента

Созданный на 21 янв. 2011  ·  10Комментарии  ·  Источник: jashkenas/underscore

Текущее определение _.without принимает массив в качестве первого аргумента, а затем любое количество следующих аргументов. Я знаю, что это может быть сложно, но было бы полезно, если бы я мог передать другой массив в качестве аргумента.

Новая функциональность будет работать как
_.without ([1,2,3], [1, 2])
возвращается
[3]

Насколько я знаю, _.without не работает глубоко, поэтому он не может быть чрезмерно сложным -
_.without ([1,2,3, [1]], [1], 1)
возвращается
[2, 3, [1]]

enhancement wontfix

Самый полезный комментарий

Для тех, кто находит здесь свой путь .... _.difference ([0, 1, 3, 9], [1, 3]); // => [0, 9]

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

Все 10 Комментарий

К счастью, в JavaScript есть встроенный способ передать функции любое количество аргументов.

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

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

Конечно! Глупый я, как я мог забыть ...

Похоже, это нужно так называть

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

Это немного усложняет задачу (отмену сдвига массива исключения с исходным массивом).

ОБНОВЛЕНИЕ: я создал новый билет для этой проблемы: https://github.com/documentcloud/underscore/issues/issue/118

Я должен согласиться с вами обоими: с Джереми за то, что _. Без подписи согласован, и с Ондри за то, что предложенный Джеремис обходной путь выглядит немного хакерским (похоже, это тоже не работает для меня).

Таким образом, я хочу предложить введение двух новых функций подчеркивания: _.difference(*arrays) и _.symdifference(a,b) : разница обнаружит все элементы в первом массиве, которые не появляются в других предоставленных массивах, где _.symdifference () вернет те элементы, которые находятся либо в a, либо в b, но не в обоих.

«Вдохновение» для этих функций исходит от типа данных набора python, и ИМХО они не должны ограничиваться только массивами, поскольку они также применимы к объектам.

Просто быстрый способ записать его с подчеркиванием: _.without.apply (_, [x] .concat (y)), вернет массив значений в x без значений в y.

Ответ @rubenstolk работает, за исключением того, что он не комментировал свой код, поэтому подчеркивания интерпретируются как курсив. Для будущих поколений! : железнодорожный_кар:: ракета:: радуга:: поднял_хандс:

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

Я думаю, что Github не делал этого 2 года назад @reggi!

Для тех, кто находит здесь свой путь .... _.difference ([0, 1, 3, 9], [1, 3]); // => [0, 9]

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

Я знаю, что это закрыто, но оператор распространения ES6 поможет с этим;)

Для тех, кто не хочет искать оператора распространения ES6, упомянутого

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

Спасибо @addisonbgross!

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

jezen picture jezen  ·  8Комментарии

acl0056 picture acl0056  ·  5Комментарии

Francefire picture Francefire  ·  5Комментарии

xiaoliwang picture xiaoliwang  ·  3Комментарии

markvr picture markvr  ·  3Комментарии