Javascript,应用地图功能,但有两个可能的功能
Javascript, Apply map function but with two possible functions
我目前正在做一个项目,需要我(从机器上)获取长度列表并将它们转换成时间列表。
机器可以以两种不同的速度运行,其中我在较快速度值之前用 '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 循环,但我开始这个项目是为了学习其他不使用这些的方法。
我非常不确定如何根据起始字符而不是每个元素应用另一个函数。也许有一个我遗漏的命令可以在这里工作?
虽然您 可以 使用单独的 map
回调来执行此操作,但通常的解决方案是在单个 map
回调中分支或使用条件相反。
.map(x => x.charAt(0) === "F" ? +x.substring(1) : x / 10)
或在别处定义的单独函数:
.map(x => x.charAt(0) === "F" ? convertF(x) : convertNonF(x))
如果你想用两个 map
回调来代替,有多种方法可以做到这一点,但它们都比上面的更复杂,而且几乎所有方法都涉及 branching/conditionals 无论如何(我能想到的唯一一个不使用 branching/conditionals 的是 真的 过于复杂,涉及 [index, value]
对的中间数组,两个 filter
调用,以及各种其他开销)。
我目前正在做一个项目,需要我(从机器上)获取长度列表并将它们转换成时间列表。
机器可以以两种不同的速度运行,其中我在较快速度值之前用 '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 循环,但我开始这个项目是为了学习其他不使用这些的方法。
我非常不确定如何根据起始字符而不是每个元素应用另一个函数。也许有一个我遗漏的命令可以在这里工作?
虽然您 可以 使用单独的 map
回调来执行此操作,但通常的解决方案是在单个 map
回调中分支或使用条件相反。
.map(x => x.charAt(0) === "F" ? +x.substring(1) : x / 10)
或在别处定义的单独函数:
.map(x => x.charAt(0) === "F" ? convertF(x) : convertNonF(x))
如果你想用两个 map
回调来代替,有多种方法可以做到这一点,但它们都比上面的更复杂,而且几乎所有方法都涉及 branching/conditionals 无论如何(我能想到的唯一一个不使用 branching/conditionals 的是 真的 过于复杂,涉及 [index, value]
对的中间数组,两个 filter
调用,以及各种其他开销)。