首页 > 解决方案 > 只有当元素是数组时,有没有办法调用 map 方法?

问题描述

我正在使用查询字符串库来解析来自 URL 的查询参数。当查询参数为 form?foo=bar时,lib 返回一个像这样的对象:

{
  foo: bar
}

在 form?foo=bar1,bar2中,对象如下所示:

{
  foo: [bar1, bar2]
}

我想myFunction在每个元素上应用函数myObject.foo以获得类似[myFunction(bar)][myFunction(bar1), myFunction(bar2)]

有没有办法用类似的东西轻松做到这一点

myObject.foo.mapOrApply(myFunction)

无需检查这是否是一个数组?

现在,我被迫这样做,我觉得这很不美观:

Array.isArray(myObject.foo)
   ? myObject.foo.map(myFunction)
   : [myFunction(myObject.foo)];

标签: javascriptarrays

解决方案


你可以这样使用concat

[].concat(myObject.foo).map(myFunction)

这适用于myObject.foo单个值或数组

这是一个片段:

const getMapped = ({ foo }, callback) => [].concat(foo).map(callback);

 // double a single value
console.log(getMapped({ foo: 1 }, n => 2 * n))

// prefix "new" to every item in the array
console.log(getMapped({ foo: ["bar1", "bar2"] }, str => "new " + str)) 


推荐阅读