在我的项目中,我经常发现自己正在检查值是否为数组。
如果值不是数组,我从中创建一个单独的元素数组。
如果值为undefined
或null
,我会创建一个空数组。
值本身通常是对象数组或单个对象或undefined
const array = value ? (Array.isArray(value) ? value: [value]) : [];
在我决定将其纳入单独的util函数之前,是否有更简洁的方法(可能使用lodash
或underscore
)?
答案 0 :(得分:3)
你可以做到
False
var eventsArray = events ? [].concat(events) : [];
函数同时接受数组和单个参数,因此无论哪种方式都可以得到你想要的结果。
答案 1 :(得分:2)
因为你在代码中使用const我假设你使用的是ES2015 / ES6。 ES1015' S 如果没有传递值或未定义,Default function parameters允许使用默认值初始化形式参数。
function abc(value = []) {
const array = Array.isArray(value) ? value: [value];
}
答案 2 :(得分:1)
以下是使用lodash的castArray和isNil全部包含在mixin中的解决方案:
_.mixin( {'asArray' : function(value){
return _.isNil(value) ? [] : _.castArray(value);
}});
用法:
_.asArray(null) -> []
_.asArray(undefined) -> []
_.asArray(0) -> [0]
_.asArray(false) -> [false]
_.asArray([1,2,3]) -> [1,2,3]
_.asArray('wibble') -> ['wibble']
答案 3 :(得分:1)
如果您使用ES6,则可以执行以下操作,它比.concat()
更清晰;
function method(value = []) {
const array = [...value];
}