Skip to content

Instantly share code, notes, and snippets.

@turbobabr
Last active August 29, 2015 14:21
Show Gist options
  • Save turbobabr/792913fe3a8b28bb41ee to your computer and use it in GitHub Desktop.
Save turbobabr/792913fe3a8b28bb41ee to your computer and use it in GitHub Desktop.
Underscore Recipes

Удаление всех ложных элементов из массива

Для того, чтобы грохнуть все ложные значения из масива, такие как false, ''(пустая строка), undefined, 0, null и NaN, в Underscore'e есть специальная функция _.compact(array). Функция возвращает копию поданного в нее массива без упомянутых ложных сообщений.

Может быть очень полезна в цепочки после вызова функции _.map(), которая в результате маппинга при определенных условиях может вернуть undefined, если нет надобности мапить обрабатываеммый объект.

Пример из документации:

_.compact([0, 1, false, 2, '', 3]);
=> [1, 2, 3]

Пример использования в связке с _.map() функцией для подчистки пустых элементов:

var list = [
  {
    firstName: "Alex",
    lastName: "Smith"
  },
  {
    firstName: "Kate",
    lastName: "Woo"
  },
  {
    firstName: "Andrew"
  }
];

_.map(list,function(o){
  if(!o.lastName) return; // Этот вызов добавит `undefined`в возвращаемый массив 
  return o.firstName+" "+o.lastName;
});
// => ['Alex Smith','Kate Woo',undefined]

_.chain(list).map(function(o){
  if(!o.lastName) return;
  return o.firstName+" "+o.lastName;
}).compact().value();
// => ['Alex Smith','Kate Woo']

Что если?

  1. Вызвать без параметров или же с undefined параметром -> вернет пустой массив:
_.compact();
// => []

var a;
_.compact(a);
// => []
  1. Вместо массива подать строку -> вернет массив символов собранных из строки:
_.compact("Это Текст!");
// => ['Э','т','о',' ','Т','е','к','с','т']
  1. Вместа массива подать объект, число или еще какую-нибудь хрень -> вернет пустой массив:
_.compact({});
// => []

_.compact(100500);
// => []
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment