首页 > 解决方案 > Javascript,应用地图功能,但有两个可能的功能

问题描述

我目前正在从事一个项目,该项目需要我(从机器上)获取长度列表并将它们转换为时间列表。该机器可以以两种不同的速度运行,其中我在较快速度的值之前用“F”表示,在较慢速度的值之前没有“F”。这是我的值数组的一个示例: [1.234,2.13,F1.23,5.5,F2.3] 要将它们转换为时间,我需要将前面没有和 F 的每个元素除以 10,将前面有 F 的每个元素除以 100,并且删除 F。预期的数组结果应类似于: [0.1234,0.213,0.0123,0.55,0.023]

我知道如何使用地图功能,如果我只想应用一个功能,例如.map[x => x/10]. 我也知道我可以使用 for 循环,但我开始这个项目是为了学习其他不使用这些的方法。我非常不确定如何根据起始字符应用另一个函数,但是不是每个元素。也许我缺少一个可以在这里工作的命令?

标签: javascriptarraysmap-function

解决方案


虽然您可以使用单独map的回调来执行此操作,但通常的解决方案是在单个map回调中分支或使用条件。

.map(x => x.charAt(0) === "F" ? +x.substring(1) : x / 10)

或具有单独的功能,在别处定义:

.map(x => x.charAt(0) === "F" ? convertF(x) : convertNonF(x))

如果你想用两个map回调来代替,有多种方法可以做到这一点,但它们都比上面更复杂,而且几乎所有的方法都涉及分支/条件(我能想到的唯一一种即不使用分支/条件确实过于复杂,涉及中间数组[index, value]对、两次filter调用和各种其他开销)。


推荐阅读