Javascript jQuery对数组的处理不当:长度=0错误?

Javascript jQuery对数组的处理不当:长度=0错误?,javascript,jquery,json,Javascript,Jquery,Json,我不知道这是我对jQuery的一点了解,还是只是一个bug,但下面是发生的情况。我有一小段JSON代码 然后我用jQuery的getJSON获得了它,没有任何缺陷。然后我需要两个单独的数组:一个保存键,另一个保存值,同样,Object.keys和Object.values没有问题。通过将结果记录在单个字符串中,一切正常。直到我尝试使用键作为索引和值作为数据来构造关联数组。通过记录结果,我得到一个值为0的额外长度索引。这是我的jQuery代码 您真正想要使用的是键值对象,而不是数组。因此,您至少可

我不知道这是我对jQuery的一点了解,还是只是一个bug,但下面是发生的情况。我有一小段JSON代码

然后我用jQuery的getJSON获得了它,没有任何缺陷。然后我需要两个单独的数组:一个保存键,另一个保存值,同样,Object.keys和Object.values没有问题。通过将结果记录在单个字符串中,一切正常。直到我尝试使用键作为索引和值作为数据来构造关联数组。通过记录结果,我得到一个值为0的额外长度索引。这是我的jQuery代码


您真正想要使用的是键值对象,而不是数组。因此,您至少可以选择:

实际上,数组是对象,您可以附加/添加新属性,但是,此类对象具有预定义的原型和属性。这些属性之一是长度。因此,您将获得意外的属性长度

更改此变量arr=[];对该变量arr={};。 更改此变量arr=[];此变量为arr=Object.createnull;。 向对象数组添加属性

设arr=[2]; arr['myKey']='EleFromStack'; console.logarr.myKey;
console.logarr.length;//1原因长度是数组类型的一部分。最大的问题是JavaScript中没有像关联数组这样的野兽。所有数组都必须具有编号索引。用对象处理所需的关联方式

因此,您只需将平面数组中的第一个平面指定给一个变量,并保留原始关联,而不是迭代它


您试图以这种方式将对象分解并重新组装到数组中,有什么特别的原因吗?

我认为您需要更改这个var arr=[];这个变量arr={};或此变量arr=Object.createnull;您的键不是整数,因此基本上只是重新创建对象。。。。var a=[];a['id]=1;控制台长度
{
    "planes":[
        {
            "id":1,
            "name":"Boeing 767-300",
            "height":54.9 ,
            "wingspan":47.6, 
            "vel": 851,
            "vel max":913,
            "plane width":283.3,
            "weight":86070, 
            "full weight":158760, 
            "passengers":{
                "1 class":350,
                "2 class":269,
                "3 class":218
            },
            "fuel tank":90.625,
            "engine":"2 turbofan General Electric CF6-80C2"
        },
        {
            "id":2,
            "name":"Boeing 737-800",
            "height":33.4 ,
            "wingspan":35.8, 
            "vel": 840,
            "vel max":945,
            "plane width":105.44,
            "weight":32704, 
            "full weight":56472, 
            "passengers":{
                "1 class":189
            },
            "fuel tank":90.625,
            "engine":"2 turbofan CFM56-3C1"
        }
    ]
}
var arr=[];
$.getJSON("js/jsondata.json", function(data){
    var keys= Object.keys(data.planes[0]);
    var values= Object.values(data.planes[0]);
//im only testing on the first object, for now

    $.each(keys, function(i){
//creating the associative index and assigning the value
        arr[keys[i]]= values[i];
        console.log("Key: "+ keys[i]+", Value: "+values[i]);
//this logs the exact values and indexes
    });
    console.log(arr);
//this logs an extra "length" 0
});