将单个值转换为数组

时间:2016-03-11 15:16:04

标签: javascript underscore.js lodash

在我的项目中,我经常发现自己正在检查值是否为数组。

如果值不是数组,我从中创建一个单独的元素数组。

如果值为undefinednull,我会创建一个空数组。

值本身通常是对象数组或单个对象或undefined

const array = value ? (Array.isArray(value) ? value: [value]) : [];

在我决定将其纳入单独的util函数之前,是否有更简洁的方法(可能使用lodashunderscore)?

4 个答案:

答案 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的castArrayisNil全部包含在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];
}