如何在javascript中创建没有键的json对象数组

时间:2017-08-08 12:39:51

标签: 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}]

这样的数组

5 个答案:

答案 0 :(得分:1)

没有键值对象没有创建。所以这就是它从变量名

添加键名的原因

看到你的错误。它是无效一个

var a = [{8,0,2}, {20,0,2}];
console.log(a)

您可以推送array而不是object

var data = [];
var hh = 9
var mm = 8
var qty = 2
var data = [];
data.push([hh,mm,qty])

console.log(data)

答案 1 :(得分:0)

你不能。

Object Literal Property Value Shorthands允许您创建一个对象,其中的属性名称是从用于传递数据的变量名称推断出来的。

如果你没有变量名,那么JS引擎就没有什么可以用来确定属性名称应该是什么。

考虑使用函数。

console.log([time(8,0,2), time(20,0,2)]);

function time (hh, mm, qty) {
    return {hh, mm, qty};
}

答案 2 :(得分:0)

最后得到的结果是有道理的。通过执行{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"];

动态设置密钥

var hh = 9;
var mm = 8;
var qty = 2;

var obj = {};
obj[hh] = null;
obj[mm] = null;
obj[qty] = null;

//obj = {9:null,8:null,2:null};

我不确定这是否能解决您的问题或完全回答您的问题,但它可能会让您更深入地了解正在发生的事情以及原因。上面的示例是创建快速查找与字典的常用方法,其中的值将替换为null或undefined。

答案 3 :(得分:0)

您的示例使用ECMAScript 6的新功能,它是初始化对象属性的简写语法。您的示例中的这一行:

data.push({hh,mm,qty});

相当于这个详细的:

data.push({hh: hh, mm: mm, qty: qty});

JavaScript中的对象始终具有键和值。无法仅在普通对象中保存值。但是,还有另外两种解决方案。

一个使用数组

data.push([hh, mm, qty]);

注意用方括号代替卷曲的方括号。这显然会将三个值的数组推送到data数组。检索值时,您可以只引用它们的索引,因为数组的项目将始终保留其索引:

var data2 = [hh, mm, qty];
var hh2 = data2[0];
var mm2 = data2[1];
var qty2 = data2[2];

另一种“保存值”的方法是使用集合,但构造Set对象仍然需要传递一个数组:

data.push(new Set([hh, mm, qty]));

在这种情况下访问数据不那么简单,因为该集合通常只允许您迭代它。与其他语言中的类似数据结构不同,JavaScript集将保留插入值的顺序。因此可以安全地将其转换为数组:

var mySet = new Set([hh, mm, qty]);
var data3 = Array.from(mySet);
var hh3 = data3[0];
var mm3 = data3[1];
var qty3 = data3[2];

您可以阅读有关集here的更多信息。

答案 4 :(得分:0)

您可以使用键我假设您想要一个JSON对象将其包装在另一个JSON对象上。

类似于{ [{8,0,2}, {20,0,2}] },但这有问题-它不是有效的JSON

我的一种情况也有类似的问题。然后我意识到

没有密钥就不可能存在顶级JSON!

考虑这个示例,您在JSON中还有另一个KV对,还有这个数组。

{ 
  "somekey" : "somevalue",
  [ {8,0,2}, {20,0,2} ]
}

您可以使用键“ somekey”来获取“ somevalue”。但是,您将如何访问阵列?你不能:(

我建议您对JSON使用顶级密钥,并将此数组作为其值。 示例

{
  "my array" : [ {8,0,2}, {20,0,2} ]
}