2015-02-01 3 views
3

Почему я не могу сделать это с подчеркиванием *?Подчеркивание/lodash: как отфильтровать пустые свойства?

_.omit({ foo: [] }, _.isEmpty); 

Я ожидаю, что пустой объект, то есть {}, но он всегда возвращает то, что, как представляется, копия объекта неизмененного источника.

_.omit должен поддерживать функцию обратного вызова, первым аргументом которой является значение элемента в объекте (мне все равно, что это за ключ, я просто хочу отказаться от пары ключ/значение, где значение равно пусто). http://underscorejs.org/#omit

_.isEmpty имеет единственный параметр и должен игнорировать любые другие. Это похоже на идеальное соответствие для обратного вызова _.omit. http://underscorejs.org/#isEmpty

** Примечание: Я фактически использую реализацию lodash (v.2.4.1) интерфейса подчеркивания.

ответ

4

Черт. У меня возник вопрос, но эта последняя строка, которую я написал, заставила меня снова подумать. Я вернулся к http://underscorejs.org и открыл консоль браузера, и там был загружен мой фрагмент кода. Он выполнялся так, как ожидалось, возвращая пустой объект!

Я пробовал его с помощью lodash 3.0.1 (выпущен всего два дня назад!), И он также работает так, как ожидалось.

Я с тех пор подтвердил, что я не могу получить lodash 2.4.1's _.omit для работы с любой предикат функции.

Наверно, есть ошибка в lodash 2.4.1. Эта версия была довольно стабильной, поэтому я уверен, что она широко распространена, и я не просто выброшу свой вопрос. Учитывая уровень абстракции за _.omit, я подозреваю, что эта ошибка влияет и на другие функции. Я надеюсь, что это помогает кому-то.

+1

Вы ищете '_.omitBy' в Lodash. '_.omit' принимает объект и массив свойств. – Nate

+0

Ну, в lodash 2.4.1 и 3.0.1, это работает так, как ожидалось, и это решение, в котором я закончил использование: 'var storable = _.omit (attrs, function (value) { return value === null | | value === undefined; }); ' – Lambart

+0

Ставлю, что' _.omitBy' является недавним изменением в 4. Рад, что вы его работали. – Nate

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