javascript - 我的代码有效但不知道为什么(使用对象)

标签 javascript object javascript-objects

我有以下对象:

var dataset = [
      [
        {"value":"PRE","formattedValue":"PRE"},
        {"value":"2017-06-15 00:00:00","formattedValue":"15/06/2017 0:00:00"},
        {"value":"COSTA RICA","formattedValue":"COSTA RICA"},
        {"value":"6.15","formattedValue":"6,150"}
      ],
      [
        {"value":"PRE","formattedValue":"PRE"},
        {"value":"2017-06-15 00:00:00","formattedValue":"15/06/2017 0:00:00"},
        {"value":"EL SALVADOR","formattedValue":"EL SALVADOR"}
      ]
]

它太复杂而且有我实际上不需要的数据,所以我试着把它变成这样:

[
    {
        "estado":       "PRE",
        "fecha":   "2017-06-15 00:00:00",
        "pais":     "COSTA RICA",
        "precio": "6.15",       
    }
]

我终于做到了,但我不确定为什么我的代码能正常工作。 我用这段代码完成了:

var datafinal = [];
function convertion(){
    var dataobj = dataset.getData();            
    for(var x in dataobj){
        datafinal[x] = { "estado": dataobj[x][0]["value"] };
        datafinal[x]["fecha"] = dataobj[x][1]["value"];
        datafinal[x]["pais"] = dataobj[x][2]["value"];
        datafinal[x]["precio"] = dataobj[x][3]["value"];
    }               
}

如果您注意的话,您会看到我添加到新对象的第一个值使用的格式与其他值不同。

我发现如果我用第二种格式添加每个值,它什么也不会添加。 但是如果我以第一种格式添加所有内容,它只会添加最后一个值;

所以,我用第一种格式制作了淡水河谷,用第二种格式制作了其余的,效果很好。

...为什么,有人可以向我解释为什么会这样吗?

最佳答案

这是因为一开始datafinal[x]还不存在,所以需要给它赋值,也就是赋给它一个对象。这就是第一个任务所做的。其他分配改变现有值,因为您不希望它们替换您在第一行分配的值。

注意其他赋值不赋给 datafinal[x] 本身,而是写入它的一个属性:所以你扩展了你在第一个赋值中赋值的对象。

事实上,第一个作业可以分为两部分:

datafinal[x] = {};
datafinal[x].estado = dataobj[x][0].value;

... 所以现在所有的属性分配看起来都一样(注意:您不需要这些文字属性名称的方括号表示法)。第一个赋值现在只是将值初始化为一个对象(而不是数字、字符串、 bool 值……)。没有这样的分配,您就没有对象,也无法为其分配属性。

如果将其写在一个对象字面量赋值中,您可能会更容易理解:

datafinal[x] = { 
    estado: dataobj[x][0].value,
    fecha: dataobj[x][1].value,
    pais: dataobj[x][2].value,
    precio: dataobj[x][3].value
};

关于javascript - 我的代码有效但不知道为什么(使用对象),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44598474/

相关文章:

mysql - 渲染部分帮助和故障

javascript - 在对象 Javascript 中调用另一个方法中的方法时出错

javascript - Object.keys.map 只返回第 n 个值并排除其余值

javascript - 在Alfresco中动态创建空间/文件夹的Javascript无法正常工作

javascript - 从1.3.2升级到1.8.3时jquery ajax成功

javascript - 如何在 Angular2 中使用 Dojo?

java - 嵌套数据结构的对象创建,对性能的可避免影响?

iphone - iOS : How to Copy One User Define Model Class to Another Object of It's type

javascript - 当我将 javascript 对象添加到数组时,它们的属性会发生变化

javascript - 我在 jQuery 中有一个分步过程,有更好的方法来编码吗?