javascript - 只有当元素是数组时,有没有办法调用 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)];
解决方案
你可以这样使用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))
推荐阅读
- snowflake-cloud-data-platform - 检索覆盖视图 SnowFlake
- java - instanceof 中的模式匹配有时无法解析理论上可解析的范围
- javascript - useContext 未定义
- firebase - 参数类型“用户?函数(用户)”不能分配给参数类型“用户函数(用户?)”
- azure - 将多次运行提交到 AzureML 上的同一节点
- r - 用循环或咕噜声作情节
- flutter - FlutteEasyLocalization 不适用于 RestartWidget
- plotly - 如何让 Plotly 根据 Streamlit 应用程序中的屏幕分辨率调整绘图大小?
- java - 是否有在 Java 中运行具有静态变量的类的多个实例的解决方法?
- matlab - 避免使用 Matlab 循环来增加价值