0

我有以下 Javascript 对象。

{min: 0.01, max: 0.02, 29%: 0.03, 31%: 0.04, 32%: 0.05}

如何将其转换为键为字符串的对象。例如:

{'min': 0.01, 'max': 0.02, '29%': 0.03, '31%': 0.04, '32%': 0.05}

我需要这种格式的原因是因为NoUISlider将它用于自定义值。

手动插入值时,我创建了一个var range = {} 并分配了如下值:

range = [percent + '%'] = some_decimal_value; // percent is an integer

NoUiSlider 不接受像第一个这样的对象,因此我需要将其转换为带有键作为字符串的对象。

我试过了range[String(percent + '%')], didn't work.

请参阅“步骤之间的捕捉”对象应如何出现在此处

当我将值或范围变量更改为此:

range = {
    'min': 0,
    '10%': 50,
    '20%': 100,
    '30%': 150,
    '40%': 500,
    '50%': 800,
    'max': 1000
}

有用。

谢谢。

4

2 回答 2

1

您的原始对象首先不能存在

SyntaxError: Unexpected token '%'. Expected ':' after property name.

你所有的键都是javascript中的自动字符串。

于 2014-10-22T09:41:20.400 回答
1

这与 NoUISlider 无关 - 您当前的对象根本无效。对象键名中不能有%符号,除非它们首先用引号括起来。

就目前而言,您的 JavaScript 正在引发以下错误:

未捕获的 SyntaxError:意外的令牌%

您在这里唯一能做的就是首先修改该对象的生成位置 - 您的 JavaScript 无论如何都会在此处抛出错误,因此请检查浏览器的JavaScript 控制台以了解发生这种情况的位置。


该对象是有效的,因为我在代码中对其进行了初始化,因为我可以在检查器中正确地看到它,至少在我初始化它的方式上,如 [percent + '%'] – Idan Shechter 2 分钟前

如果是这种情况,那么您的对象键已经是字符串形式。在 JavaScript 中,当您将 Number 值添加到 String 值时,它会将两个值连接成一个 String 值:

1 + '%'
-> "1%"

var foo = {};
foo[30 + '%'] = 'bar';
-> Object {30%: "bar"}

JavaScript 控制台可能会将其显示为30%(不包含在引号中),但如果我们检查它的类型,我们会发现它实际上是一个字符串:

for (var key in foo)
    console.log(typeof key);
-> string

您的问题表明,没有浮点值可以正常工作,但使用浮点值不会,所以我认为这里的真正问题可能是您在初始化原始对象时使用的是浮点值而不是整数值。

于 2014-10-22T09:42:49.587 回答