Для того, чтобы грохнуть все ложные значения из масива, такие как 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']- Вызвать без параметров или же с
undefinedпараметром -> вернет пустой массив:
_.compact();
// => []
var a;
_.compact(a);
// => []- Вместо массива подать строку -> вернет массив символов собранных из строки:
_.compact("Это Текст!");
// => ['Э','т','о',' ','Т','е','к','с','т']- Вместа массива подать объект, число или еще какую-нибудь хрень -> вернет пустой массив:
_.compact({});
// => []
_.compact(100500);
// => []