创建具有不同数量元素的JSON数组?

时间:2015-05-26 09:59:03

标签: javascript html arrays json

我要做的是创建一个具有不同数量元素的JSON。

json = [
    {
        key: "test",
        values: [
            {
                "label" : "A" ,
                "value" : 29
            } ,
            {
                "label" : "B" , 
                "value" : 0
            } ,........

元素(和信息本身)values将包含的数量并不总是相同。

  1. 我怎样才能推动"元素(或数组?)到"值"?
  2. 如何创建一个数组,其元素具有与#34;值相同的结构"?

2 个答案:

答案 0 :(得分:0)

您的values密钥指向array。如果从不更改(意味着值将始终是一个数组),那么尝试添加它并不重要。无论是数组,对象还是元素,您都可以使用.push()

json[0].values.push(new_element_or_array_variable);

如果你想重新创建一个与数值相同的数组,那么知道它是如何构建的通常会更好,但是可以说你盲目地进入。

var json = [{
    key: "test",
    values: [{
        "label": "A",
            "value": 29
    }, {
        "label": "B",
            "value": 0
    }]
}];

var struct = json[0].values.map(function (a, b) {
    if (typeof a === 'object') {
        var obj = {};
        for (var key in a) {
            if (a.hasOwnProperty(key)) {
                obj[key] = -1;
            }
        }
        return obj;
    }
});

console.log(struct);

那么你就拥有了一个带有空对象的值的副本。

Demo

在此更新:

//...
for (var key in a) {
            if (a.hasOwnProperty(key)) {
                obj[key] = -1;
            }
        }
//...

你做的Evey循环(在上面的代码中)将逐个访问对象中的每个键。因此在第一个循环(=迭代)中,键将包含“label”,在第二次迭代中,它将包含“value”。为了确保您只采用第一个对象的结构,并且没有考虑其余部分,只需执行以下操作:

if (typeof a === 'object' && b == 0) {
        var obj = {};
        for (var key in a) {
            if (a.hasOwnProperty(key)) {
                obj[key] = -1;
            }
        }
        return obj;
    }

其中aobjectbobjectvalues array的索引。

另请注意,我的map函数仅检查它是否为对象(带有typeof)。如果你有整数,字符串或数组,你应该检查它们的类型并判断你想用它们做什么。

你可以这样做:

    if (typeof a === 'object') {
        //... code here
    }else{
      return a;
    }

答案 1 :(得分:0)

  

我添加了第二个问题,我忘了添加,你也有答案吗?

     

如何创建一个数组,其元素与“values”具有相同的结构?

你需要一个数组,object就像这样

var values = [];
var obj = {};                     // line 1
obj.label= 'desired value';       // line 2
obj.value= 'desired value';
values.pust(obj);                 //line 3  

如果要在数组中插入多个,可以将line1-line3置于循环中。