【发布时间】:2021-06-21 01:06:37
【问题描述】:
我有一个用户生成的 JavaScript 对象,其格式如下:
a = {
"A": [1.20, 1.75],
"B": [1.80, 2.25],
"C": [2.35, 3.15],
"1": [3.40, 3.95],
"2": [3.97, 4.15],
"3": [4.30, 5.15]
}
给定一个浮点数x,我想确定同一数组中的哪两个值(如果有)是x。我还希望能够判断 x 是否超出数组的 all 引用的值范围,或者它是否位于两组值之间。也就是说,我想要一个函数f(a, x),这样:
-
f(a, 4.01)返回"2" -
f(a, 4.20)返回["2", "3"](因为4.20介于"2"和"3"中指定的范围之间) -
f(a, 1.05)返回"less"(因为1.05小于数组中提到的最小值,1.20) -
f(a, 5.20)返回"greater"(因为5.20大于数组中引用的最大值,5.15)
我知道如何为 one 特定对象硬编码(通过使用很长的一系列 if 和 else if 语句),我想我可以连接所有数组放入一个长数组,然后检查哪一对值 x 落入(或找到另一个非常繁琐的解决方案)。
我的问题是:有没有简单的方法来执行这个任务?例如,一个库,内置函数等
我使用的是服务器端 Node.js,所以如果你知道 NPM 上有一个可用的包,那就可以了。
因为对象将是用户生成的,如果存在格式问题(例如,重叠范围),如果您有办法抛出错误,则可以加分。
附注我不知道我是否清楚地解释了这一点。如果您不明白,请发表评论,以便我澄清。
【问题讨论】:
-
如果您知道如何为一个值执行此操作,只需循环该代码即可。
-
当对象为
{A: [1,2], B: [4,5]},值为3时,你想返回什么?它既不小于也不大于所有范围。 -
@Bergi 它在
A和B之间,所以它应该返回["A", "B"]。我的意思是我知道如何将它硬编码为一个 pre-determined 值a的函数。如果a的值发生变化,则必须重写该函数。
标签: javascript arrays javascript-objects