添加数组开头的键值

时间:2012-12-12 13:31:55

标签: javascript

我想在javascript JSON数组的开头添加一个key->值对,如下所示:

var temp = new Array();
temp = {
          ['LABEL_ID': 10, 'LABEL_TYPE': A3],
          ['LABEL_ID': 17, 'LABEL_TYPE': A6]
       }

我想做什么:

var temp = new Array();
temp = {
          'PAPER': A80 
               ['LABEL_ID': 10, 'LABEL_TYPE': A3],
               ['LABEL_ID': 17, 'LABEL_TYPE': A6]
       }
你可以帮我吗?

修改 这是我的代码:

// returns paper type from selected grid line
var ppt     = Ext.getCmp('labelType').getValue();

// returns selected grid rows
var rows    = Ext.getCmp('labelGrids').getSelectionModel().getSelection();


// here is my array that I want to add ppt variable value to existing array, then I will convert this to a JSON array
for (var i = 0; i < count; i++)
{
   prints[i] = {'LABEL_ID': rows[i].data.LABEL_ID, 'LABEL_TYPE':rows[i].data.LABEL_TYPE}
}

原因是在数组的开头添加ppt值,我需要在服务器端使用此记录。因此,我不想在所有方面重复!

5 个答案:

答案 0 :(得分:2)

如果你这么倾向我会说这是你的选择。

你的javascript语法是无效的。 您希望将“标签”对象添加到数组中,然后将temp分配给覆盖刚刚创建的数组的新对象。

如果要添加到数组,则必须使用方法.push()

像这样:

labelArray.push({'LABEL_ID': '10', 'LABEL_TYPE': 'A3'});
labelArray.push({'LABEL_ID': '17', 'LABEL_TYPE': 'A6'});

否则这可能是指向正确方向的指针

var labelArray = new Array({'LABEL_ID': 10, 'LABEL_TYPE': A3},
               {'LABEL_ID': 17, 'LABEL_TYPE': A6});
var paper = {

    papertype : A80,
    labels : labelArray

}

但它既不好也不干净但它适合你。

答案 1 :(得分:2)

嗯,我希望你的问题意味着这个脚本:

要回答您编辑的问题,一个简单的方法是将其包装在另一个对象中:

var temp = new Array();
temp = [
  {"LABEL_ID": 10, "LABEL_TYPE": "A3"},
  {"LABEL_ID": 17, "LABEL_TYPE": "A6"}
       ]
 // wrap temp in another object;

 var obj = {};
 obj.PAPER = A80;
 obj.Data = temp;
 //And convert to json.
 console.log(JSON.stingify(obj));

输出:

{"PAPER":"A80","Data":[{"LABEL_ID":10,"LABEL_TYPE":"A3"},{"LABEL_ID":17,"LABEL_TYPE":"A6"}]}

希望这会有所帮助。调用该函数将为您的对象添加所需的proptery

var temp = new Array();
temp = [
  {"LABEL_ID": 10, "LABEL_TYPE": "A3"},
  {"LABEL_ID": 17, "LABEL_TYPE": "A6"}
       ]

  addPaperProperty(temp, 'PAPER', ['AA','BB']);

  function addPaperProperty(currentArray, newPropertyField, newPropertyArr){
    var newArray = [];
    var i=0;
    $(temp).each(function(){
       this[newPropertyField] = newPropertyArr[i++];
      newArray.push(this);
    });
    console.log(newArray);
    return newArray;
  }

结果将是

[{LABEL_ID: 10, LABEL_TYPE: "A3", PAPER: "AA"},
{LABEL_ID: 17, LABEL_TYPE: "A6", PAPER: "BB"}]

答案 2 :(得分:1)

这是数组。这种变量的类型称为哈希表,因为它定义了键/值对。

实际回答之前的一些要点:

  • 键和值都可以是任何类型,但好的做法是将键作为普通字符串。
  • 值可以是任何值,包括普通数组甚至是另一个哈希表。
  • 你不能只拥有没有价值的钥匙。

因此,为了使您的代码有效,您可以拥有这样的东西:

temp = {
    'PAPER': 'A80', 
    'LABELS': [{'LABEL_ID': 10, 'LABEL_TYPE': 'A3'}, 
               {'LABEL_ID': 17, 'LABEL_TYPE': 'A6'}]
};

这将添加普通键/值对,然后添加一个键,其值为哈希表数组。

要访问特定标签,您可以使用以下代码:

var id = temp["LABELS"][1]["LABEL_ID"];

请注意,JavaScript区分大小写,因此大小写在密钥名称中非常重要,这意味着temp["paper"]将返回 undefined

Live test case

答案 3 :(得分:1)

您的对象在整个地方似乎无效: 外括号应为方形:[ ],如果你真的希望它是一个数组,那么内部括号是{ },因为它们是对象。

此外,除非A3A6是您之前定义的变量,否则您需要将它们括在撇号中,因为它们是字符串:

var temp = [
    {'LABEL_ID': 10, 'LABEL_TYPE': 'A3'},
    {'LABEL_ID': 17, 'LABEL_TYPE': 'A6'}
]

现在,如果您想在数组中添加属性,那么最好这样做:

var temp = [
    {'PAPER': 'A80'},
    {'LABEL_ID': 10, 'LABEL_TYPE': 'A3'},
    {'LABEL_ID': 17, 'LABEL_TYPE': 'A6'}
]

或者,将temp设为对象,而不是:

var temp = {
    'PAPER':'A80',
    'labels':[
        {'LABEL_ID': 10, 'LABEL_TYPE': 'A3'},
        {'LABEL_ID': 17, 'LABEL_TYPE': 'A6'}
    ]
}

(在对象中,你总是有一个key:value关系,在数组中,你从来没有。

答案 4 :(得分:-1)

嗨,这是一个有效的JSON对象

temp = {
      'PAPER': A80, 'LIST' : {
           ['LABEL_ID': 10, 'LABEL_TYPE': A3],
           ['LABEL_ID': 17, 'LABEL_TYPE': A6]
       }
   }