Для того, чтобы грохнуть все ложные значения из масива, такие как 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);
// => []