如何在javascript中创建无键json对象数组
我想创建一个没有键的JSON对象数组。这是如何实现的 例如如何在javascript中创建无键json对象数组,javascript,arrays,Javascript,Arrays,我想创建一个没有键的JSON对象数组。这是如何实现的 例如[{8,0,2},{20,0,2}] var hh = 9 var mm = 8 var qty = 2 var data = []; data.push({hh,mm,qty}) 它给出的数据类似于[{hh:9,mm:8,qty:2}] 我想要像[{9,8,2},{9,3,4}]这样的数组,但没有创建键值对对象。这就是为什么它从变量名添加键名 看到这个错误了。它是一个无效的错误 var a=[{8,0,2},{20,0,2}]; c
[{8,0,2},{20,0,2}]
var hh = 9
var mm = 8
var qty = 2
var data = [];
data.push({hh,mm,qty})
它给出的数据类似于[{hh:9,mm:8,qty:2}]
我想要像[{9,8,2},{9,3,4}]这样的数组,但没有创建键值对对象。这就是为什么它从变量名添加键名 看到这个错误了。它是一个无效的错误
var a=[{8,0,2},{20,0,2}];
console.log(a)
您不能
允许您创建一个对象,在该对象中,属性名称是从用于将数据传递到的变量名推断出来的
如果没有变量名,那么JS引擎就无法使用它来确定属性名应该是什么
考虑改用函数
console.log([时间(8,0,2),时间(20,0,2)];
功能时间(小时、毫米、数量){
返回{hh,mm,qty};
}
最后得到的结果很有意义。通过执行{hh,mm,qty},您实际上是在说“使用变量名作为键,使用其值作为值”。如果您提供一个示例,说明您打算如何使用结果和访问变量,即您最终想要的对象形状,可能会对我们有更多帮助
也就是说,有两种选择:
使用值作为键
如果确实希望对象看起来类似于{8,0,2},则可以使用这些值作为键(所有键都会转换为字符串),以便执行以下操作:
var example1 = {8:undefined,0:undefined,2:undefined};
var example2 = {8:null,0:null,2:null};
var keys = [];
for(var name in example1) {
keys.push(name);
}
// keys = ["8","0","2"];
var otherKeys = Object.keys(example2);
// otherKeys = ["8","0","2"];
动态设置关键点
我不确定这是否解决了你的问题或完全回答了你的问题,但它可能会让你对正在发生的事情和原因有更多的了解。上述示例是创建快速查找的常用方法,而不是使用值代替null或undefined的字典。您的示例使用ECMAScript 6的一个新功能,这是初始化对象属性的简写语法。您的示例中的这一行:
data.push({hh,mm,qty});
相当于这个冗长的:
data.push({hh: hh, mm: mm, qty: qty});
JavaScript中的对象将始终具有键和值。无法在普通对象中仅保存值。然而,还有两种解决方案
一个是使用数组的:
data.push([hh, mm, qty]);
请注意,方括号取代了曲括号。这显然会将一个包含三个值的数组推送到数据
数组中。检索值时,您可以只引用它们的索引,因为数组的项将始终保留它们的索引:
var data2 = [hh, mm, qty];
var hh2 = data2[0];
var mm2 = data2[1];
var qty2 = data2[2];
另一种“保存值”的方法是使用集合,尽管构建集合对象仍然需要向其传递数组:
data.push(new Set([hh, mm, qty]));
var mySet = new Set([hh, mm, qty]);
var data3 = Array.from(mySet);
var hh3 = data3[0];
var mm3 = data3[1];
var qty3 = data3[2];
在这种情况下,访问数据不那么简单,因为集合通常只允许您对其进行迭代。与其他语言中的类似数据结构不同,JavaScript集将保留插入值的顺序。因此,它可以安全地转换为阵列:
data.push(new Set([hh, mm, qty]));
var mySet = new Set([hh, mm, qty]);
var data3 = Array.from(mySet);
var hh3 = data3[0];
var mm3 = data3[1];
var qty3 = data3[2];
您可以阅读有关集合的更多信息。您可以使用键将其包装到另一个JSON对象上。我假设您想要一个JSON对象
像这样的{[{8,0,2},{20,0,2}]}
但是这有一个问题-它不是一个有效的JSON
在我的一个场景中,我遇到了类似的问题。然后我意识到
没有密钥,顶级JSON不可能存在
考虑这个例子,JSON中还有另一个KV对,还有这个数组
{
"somekey" : "somevalue",
[ {8,0,2}, {20,0,2} ]
}
您可以使用“somekey”键获取“somevalue”。但是如何访问阵列呢?你不能:(
我建议您为JSON使用顶级键,并将此数组作为其值。例如:
想要的结果不是有效的javascript对象。没有没有没有键的对象。数组是具有隐式键的对象,也就是说,您不必关心它们。所以只需使用数组即可。您的意思是“[[9,8,2],…]”`你可以说这个数组基本上也是对象。你要找的是数组。不是对象。像这样的控制台[{hh:8,mm:0,qty:2},{hh:20,mm:0,qty:2}]不,我想要整数数组type@VedPrakash答案很简单,不用使用标准对象,而是使用数组并进行如下初始化:[8,0,2]或[hh,mm,qty]用{}代替[].:-)