【问题标题】:Turning a single value into an array将单个值转换为数组
【发布时间】:2016-03-11 15:16:03
【问题描述】:

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

如果该值不是一个数组,我会从它创建一个单元素数组。

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

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

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

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

【问题讨论】:

    标签: javascript underscore.js lodash


    【解决方案1】:

    你可以的

    var eventsArray = events ? [].concat(events) : [];
    

    .concat() 函数同时接受数组和单个参数,因此无论哪种方式,您最终都会得到您想要的。

    【讨论】:

      【解决方案2】:

      由于您在代码中使用 const,我假设您使用的是 ES2015 / ES6。 ES1015 的 Default function parameters 允许在未传递任何值或未定义的情况下使用默认值初始化形式参数。

      function abc(value = []) {
      
        const array =  Array.isArray(value) ? value: [value];
      
      }
      

      【讨论】:

      • 如果传入undefined或null,value参数设置为空数组
      • @RolandStarke 在我的情况下,我想要 [],而不是 [null]
      • @Darshan null 将导致 [null]
      【解决方案3】:

      如果你使用ES6,你可以这样做,比.concat()干净;

      function method(value = []) {
        const array = [...value];
      }
      

      【讨论】:

      • 如果值是不可迭代的,这将不起作用,但 OP 要求解决方案,他可以将任何类型的值转换为数组。所以.concat() 是要走的路。
      【解决方案4】:

      这是一个使用 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']
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-28
        • 2011-10-10
        相关资源
        最近更新 更多