2

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

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值,只是我需要在服务器端记录这条记录。因此,我不想在所有行中重复!

4

5 回答 5

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"}]}

希望这可以帮助。调用该函数会将所需的属性添加到您的对象中

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"}]
于 2012-12-12T13:54:37.557 回答
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

}

但它既不好也不干净,但它对你有用。

于 2012-12-12T13:40:59.837 回答
1

您的对象似乎到处都是无效的:[ ]如果您真的希望它是一个数组,则外部括号应该是方括号,而内部括号应该是 curly { },因为它们是对象。

此外,除非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关系,在数组中,你永远不会有。

于 2012-12-12T13:37:44.063 回答
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

现场测试用例

于 2012-12-12T13:34:38.020 回答
-1

您好,这是一个有效的 JSON 对象

temp = {
      'PAPER': A80, 'LIST' : {
           ['LABEL_ID': 10, 'LABEL_TYPE': A3],
           ['LABEL_ID': 17, 'LABEL_TYPE': A6]
       }
   }
于 2012-12-12T13:38:24.030 回答