Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.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中创建无键json对象数组_Javascript_Arrays - Fatal编程技术网

如何在javascript中创建无键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

我想创建一个没有键的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}];
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]用{}代替[].:-)