仅当元素是数组时,才可以调用map方法吗?

时间:2019-07-04 10:01:47

标签: javascript arrays

我正在使用查询字符串库来解析URL中的查询参数。 当查询参数的格式为?foo=bar时,lib将返回如下对象:

{
  foo: bar
}

采用?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)];

3 个答案:

答案 0 :(得分:7)

您可以像这样使用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)) 

答案 1 :(得分:2)

您可以根据需要将其转换为数组,然后使用该函数进行映射。

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

答案 2 :(得分:1)

您可以简单地:

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