2015-05-27 4 views
6

У меня есть массив строк и вы хотите немедленно удалить некоторые из них. Но это не работаетLodash remove from string array

var list = ['a', 'b', 'c', 'd'] 
_.remove(list, 'b'); 
console.log(list); // 'b' still there 

Я предполагаю, что это произошло потому, что _.remove функции принимает строку в качестве второго аргумента, и считает, что этим имя свойства. Как сделать lodash сделать проверку равенства в этом случае?

ответ

12

Еще один вариант для вас является использование _.pull, который в отличие от _.without, не создает копию массива, а только изменяет его вместо:

_.pull(list, 'b'); // ['a', 'c', 'd'] 

Ссылка: https://lodash.com/docs#pull

+0

Точно, что мне нужно, спасибо –

1

Функция _.remove не принимает строку как второй аргумент, а функцию предиката, которая вызывается для каждого значения в массиве. Если функция возвращает true, значение удаляется из массива.

Lodas док: https://lodash.com/docs#remove

Удаляет все элементы из массива, что предикат возвращает truthy для и возвращает массив удаленных элементов. Предикат привязан к thisArg и вызывается с тремя аргументами: (значение, индекс, массив).

Итак, если вы хотите удалить b из вашего массива вы должны что-то вроде этого:

var list = ['a', 'b', 'c', 'd'] 
_.remove(list, function(v) { return v === 'b'; }); 
["a", "c", "d"] 
+0

Возвращаемое значение должно быть v == 'b', а не v! == 'b' – trevor

+0

@trevor no. Это будет соответствовать только 'b'. Мы хотим, чтобы наоборот –

+2

Я думаю, они просто хотели удалить 'b' на основе комментария в своем коде: 'b still there' – trevor

2

Как Джузеппе Pes указывает, _.remove ожидает функции. Более прямой способ сделать то, что вы хотите, это использовать вместо этого _.without, который делает принимает элементы для удаления напрямую.

_.without(['a','b','c','d'], 'b'); //['a','c','d']