Зараз у мене є така функція:
function without(array, index) {
array.splice(index, 1);
return array;
}
Я подумав, що це буде щось, що міститься у ньому, але не виглядає так.
Ця функція дозволяє мені робити один лайнер, який я можу ланцюг:
var guestList = without(guests, bannedGuest).concat(moreNames);
Неможливо досягти цього без введення предиката функцію, використовуючи лодаш?
Відповіді:
1 для відповіді № 1_.without
вже існує. Крім того, можна використовувати _.pull
також, що мутує заданий масив аргументів.
var guests = ["Peter", "Lua", "Elly", "Scruath of the 5th sector"];
var bannedGuest = "Scruath of the 5th sector";
var bannedGuests = ["Peter", "Scruath of the 5th sector"];
console.debug(_.without(guests, bannedGuest )); // ["Peter", "Lua", "Elly"]
Заборона колекції гостей не підтримується безпосередньо, але ми можемо легко обійти цю проблему:
// banning an array of guests is not yet supported, but we can use JS apply:
var guestList = _.without.apply(null, [guests].concat(bannedGuests));
console.debug(guestList); // ["Lua", "Elly"]
// or if you are feeling fancy or just want to learn a new titbit, we can use spread:
guestList = _.spread(_.without)([guests].concat(bannedGuests));
console.debug(guestList); // ["Lua", "Elly"]
Крім того, ви можете подивитися _.at
і _.pullAt
також, які мають подібну поведінку, за винятком індексів масивів замість об'єктів для видалення.