我有以下对象:
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;
...所以现在所有的属性分配看起来都一样(注意:这些文字属性名称不需要方括号表示法)。第一个赋值现在只是将值初始化为一个对象(而不是数字、字符串、布尔值......)。没有这样的赋值,你就没有对象,也不能为其赋值。
如果您将它写在一个对象文字赋值中,您可能会更容易理解:
datafinal[x] = {
estado: dataobj[x][0].value,
fecha: dataobj[x][1].value,
pais: dataobj[x][2].value,
precio: dataobj[x][3].value
};
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句