Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我的代码可以工作,但不知道为什么(使用对象)_Javascript_Object_Javascript Objects - Fatal编程技术网

Javascript 我的代码可以工作,但不知道为什么(使用对象)

Javascript 我的代码可以工作,但不知道为什么(使用对象),javascript,object,javascript-objects,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","form

我有以下目标:

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"];
    }               
}
如果您注意的话,您会看到我添加到新对象的第一个值使用的格式与其他值不同

我发现,如果我用第二种格式添加每个值,它就不会添加任何内容。 但如果我以第一种格式添加所有内容,它只会添加最后一个值

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


…为什么,有人能向我解释为什么会发生这种情况吗?

在当前形式中,您正在初始化它,告诉它在该位置创建一个对象,并使用值
{“estado”:dataobj[x][0][“value”]}对其进行“初始化”。
随后尝试访问对象
datafinal[x]
,然后访问该对象的属性,由于该属性尚不存在,因此使用给定值创建该属性。 通过简单地重复行
datafinal[x]={“estado”:dataobj[x][0][“value”}正如您使用不同的键和值所建议的,您只是在覆盖
每次使用新对象时,
datafinal[x]
的值

编辑:


至于为什么只在第二种格式中添加值不起作用,这取决于这样做是为了访问一个尚不存在的对象
datafinal[x]
的属性。然而,以第一种格式调用一次会创建该对象。

如果使用第一种格式,则每次调用时都会重写所有对象

datafinal[x] = { "estado": dataobj[x][0]["value"] };
这意味着
datafinal[x]
等于这个值,如果您这样做的话

datafinal[x] = { "fecha" = dataobj[x][1]["value"] };
它将擦除
datafinal[x]


这就是为什么您的第一种格式不起作用的原因,这是因为最初的
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
};

如果只显示dataobj,您会得到什么?您已经显示了
dataset
,但没有显示
dataset.getData()返回的内容。dataobj显示的信息与第一个dataset对象相同。为什么我们都会被无意识地否决?我们所有的答案都暗示了回答问题的相同点,但都被否决了。我不知道可能是个恶棍,我不能投票,但我没有足够的声誉,但我读的每个答案对我来说都是一样的。这家伙到底在干什么?