Javascript 数组的数组,JSON.stringify()提供空数组而不是整个对象
这是我的阵列(来自Chrome控制台): 以下是代码的相关部分: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
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)如果您无法跟踪数组的调用方式或无法控制它,code>似乎可以“修复”它。
const newMap = JSON.parse('{}');
newMap[name] = value;