【问题标题】:Stringify behaves strangely when applied to a dictionary in JavascriptStringify 在应用于 Javascript 中的字典时表现异常
【发布时间】:2017-07-07 14:14:07
【问题描述】:

我正在使用字典来注册多个设备的状态,并且我想将它们转换为 JSON 以进行存档。 这是我用来构建字典的代码:

$scope.lastValues=[];
    for (var i in nomeImpianti) {
        var newValue={
            id: i,
                name: nomeImpianti[i],
            values:{
                value1: true,
                        value2: false,
                        value3: false
            }
        }
        $scope.lastValues[nomeImpianti[i]]=0;
    }

然而,当我打印数组时,它出现在表单中:

[一般:0,电机1:0,电机2:0,impianto 1:0,impianto 2: 0...]

而不是典型的 javascript 字典的 {} 形式。 事实上,当我在控制台中输入打印时,它会作为一个封闭的“对象”给出,而如果我询问类似以下内容的类型:

var json = {"items":[{"Desc":"Item1"},{"Desc":"Item2"},{"firstName":"John"},{"lastName":"Smith"}]};

它是:

对象 {firstName: Array(2), lastName: Array(2)}

因此,如果我对 json 变量进行字符串化,则会创建正确的字符串,而如果我在 [] 分隔结构上执行此操作,则会创建一个空字符串。 如何正确处理以 {} 分隔结构表示的字典?

【问题讨论】:

  • 不要将console 例程使用的输出格式与您的值的实际情况相混淆。控制台以它认为有助于调试的方式向您显示事物,并且不同的控制台执行不同的操作。
  • 此外,您发布的第一段代码也没有任何意义。循环构造一个对象并将其分配给newValue,但随后它不使用 newValue
  • 问题是你被分配了0而不是newValue。这就是为什么数组不包含您期望的“对象”
  • 在构建字典的代码中,您不使用 newValue 做任何事情

标签: javascript json dictionary


【解决方案1】:

问题仅仅是由于我如何初始化变量。应该是:

$scope.lastValues={};

而不是: $scope.lastValues=[];

后一种形式在任何地方都可以正常工作,而不是在尝试对其进行字符串化时。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-17
    • 2015-08-29
    • 2011-12-30
    • 1970-01-01
    • 1970-01-01
    • 2014-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多