将单个值转换为数组
Turning a single value into an array
在我的项目中,我经常发现自己检查一个值是否为数组。
如果该值不是数组,我会从中创建一个单元素数组。
如果值为undefined
或null
,我创建一个空数组。
值本身通常是对象数组或单个对象或undefined
const array = value ? (Array.isArray(value) ? value: [value]) : [];
在我决定将其分解为单独的 util 函数之前,是否有更简洁的方法(可能使用 lodash
或 underscore
)?
你可以
var eventsArray = events ? [].concat(events) : [];
.concat()
函数接受数组和单个参数,因此无论哪种方式,您最终都会得到想要的结果。
由于您在代码中使用了 const,我假设您使用的是 ES2015/ES6。 ES1015的
Default function parameters 如果没有传递任何值或未定义,则允许使用默认值初始化形式参数。
function abc(value = []) {
const array = Array.isArray(value) ? value: [value];
}
这是一个使用 lodash 的 castArray and isNil all wrapped up in a 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']
如果你使用ES6,你可以做下面的,比.concat()
;
更干净
function method(value = []) {
const array = [...value];
}
在我的项目中,我经常发现自己检查一个值是否为数组。
如果该值不是数组,我会从中创建一个单元素数组。
如果值为undefined
或null
,我创建一个空数组。
值本身通常是对象数组或单个对象或undefined
const array = value ? (Array.isArray(value) ? value: [value]) : [];
在我决定将其分解为单独的 util 函数之前,是否有更简洁的方法(可能使用 lodash
或 underscore
)?
你可以
var eventsArray = events ? [].concat(events) : [];
.concat()
函数接受数组和单个参数,因此无论哪种方式,您最终都会得到想要的结果。
由于您在代码中使用了 const,我假设您使用的是 ES2015/ES6。 ES1015的 Default function parameters 如果没有传递任何值或未定义,则允许使用默认值初始化形式参数。
function abc(value = []) {
const array = Array.isArray(value) ? value: [value];
}
这是一个使用 lodash 的 castArray and isNil all wrapped up in a 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']
如果你使用ES6,你可以做下面的,比.concat()
;
function method(value = []) {
const array = [...value];
}