我正在使用查询字符串库来解析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)];
答案 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)