Javascript 数组的数组,JSON.stringify()提供空数组而不是整个对象

Javascript 数组的数组,JSON.stringify()提供空数组而不是整个对象,javascript,arrays,json,object,Javascript,Arrays,Json,Object,这是我的阵列(来自Chrome控制台): 以下是代码的相关部分: console.log(hours); var data = JSON.stringify(hours); console.log(data); 在Chrome的控制台中,我从最后一行获得[]。我应该得到{'Mon':{…}} 以下是重现问题的最少JavaScript量: var test = []; test["11h30"] = "15h00" test["18h30"] = "21h30" console.log(tes

这是我的阵列(来自Chrome控制台):

以下是代码的相关部分:

console.log(hours);
var data = JSON.stringify(hours);
console.log(data);
在Chrome的控制台中,我从最后一行获得
[]
。我应该得到
{'Mon':{…}}


以下是重现问题的最少JavaScript量:

var test = [];
test["11h30"] = "15h00"
test["18h30"] = "21h30"
console.log(test);    
console.log(JSON.stringify(test)); // outputs []
我试过其他一些东西,比如
或者,问题仍然存在。

这里是重现问题的最小javascript量

var test = [];
test["11h30"] = "15h00"
test["18h30"] = "21h30"
console.log(test);    
console.log(JSON.stringify(test)); // outputs []
上面提到的问题是,虽然javascript很乐意让您将新属性延迟绑定到
数组
JSON.stringify()
只会尝试序列化数组中的实际元素

对对象进行最小更改,使其成为实际对象,
JSON.stringify
按预期工作:

var test = {}; // here is thre only change. new array ([]) becomes new object ({})
test["11h30"] = "15h00"
test["18h30"] = "21h30"
console.log(test);
console.log(JSON.stringify(test)); // outputs {"11h30":"15h00","18h30":"21h30"}

与所有JavaScript对象一样,数组可以具有与您正在使用的基于字符串的键相同的属性。但实际上只有整数键(或可以干净地转换为整数的键)被视为数组的元素。这就是为什么JSON不能捕获您的属性,也是为什么您的数组都报告它们的长度为零

如果确实需要使用非整数键,则应使用普通对象,而不是数组。这种方法有自己的局限性——例如,您需要小心for in循环——但是JSON将按照您期望的方式工作

var hours = {
    "Mon" : {
        "11h30" : "15h00",
        "18h30" : "21h30"
    }, 
    "Tue" : {},
    "Wed" : {
        "11h30" : "15h00",
        "18h30" : "21h30"
    }, 
    "Thu" : {},
    "Fri" : {},
    "Sat" : {},
    "Sun" : {
        "11h30" : "15h00",
        "18h30" : "21h30"
    }, 
}

在javascript中,数组的索引是数字键。stringify假定数组只有数字属性

您希望使用对象,因为您拥有的不是数组,而是类似于字典

下面是我举的一个例子:

结果:
{“年龄”:1,“汽车”:2,“女朋友”:3}

之后,当您解析数据时,如果您想对其进行迭代,您可以使用类似于以下内容的代码:

for (var key in yourobject) {
  if (yourobject.hasOwnProperty(key)) {
     console.log(key, yourobject[key]);
  }
}
你可以用

const newMap = JSON.parse('{}');
newMap[name] = value;

还有新地图。结果是pars as Map

你可以在jsfiddle.net上做一个实例吗?你从哪里得到小时数?它看起来不像一个js数组,更像一个对象..你有一个伪装成数组的对象-长度为零,属性被命名。看起来你在实际需要对象(
{}
)的时候创建了数组(
[]
)。在JavaScript中,如果你想使用非数字键(例如“11h30”),你需要使用一个对象来代替。可能的重复,尽管答案没有详细说明为什么需要对象和数组。是的,但是我的表单几乎完全是动态的,所以我不能使用这个解决方案。这正是我需要的!谢谢:)
var fixed=Object.assign({},test)似乎可以“修复”它。
const newMap = JSON.parse('{}');
newMap[name] = value;