如何将一个对象添加到Javascript的JSON对象中

4

如何将一个对象追加到Javascript JSON对象中

我有一个Javascript对象,其中包含以对象数组形式的JSON,例如:

columnDefs: [
  { name: 'Report', field: 'RPT', width: 80 },
  { name: 'Element', field: 'ELEM', width: 200 },
  ...
]

我需要添加。
cellClass: myFunction 

在columnDefs对象数组中的每个单独列定义中添加以下内容,格式如下:

columnDefs: [
  { name: 'Report', field: 'RPT', width: 80, cellClass: myFunction },
  { name: 'Element', field: 'ELEM', width: 200, cellClass: myFunction  },
  ...
]

请注意,myFunction 不应该被引号包含。由于每个列定义都是一个对象,而不是数组,所以我理解在添加任何内容之前需要将其转换为数组:
var keys = Object.keys( columnDefs );
for( var key in keys ) {
  var col = columnDefs[key]
  var colArray = [];
  colArray.push( JSON.parse( JSON.stringify( col )));
  colArray.push( { cellClass: myFunction } );
  colDefs[key] = colArray;
}

然而,上述代码生成了以下内容,而这并不是所需的:
[    { name: 'Report', field: 'RPT', width: 80 },  { cellClass: myFunction } ]

有没有更简单、更好的方法来做这件事?
4个回答

3

尝试:

columnDefs.forEach(function(obj) {
   obj.cellClass = myFunction;
});

2
你可能对in的作用有所误解:它已经迭代了对象的键(或数组的索引)。
相反,你需要做的是在循环中解析json字符串一次,对其进行修改,然后重新序列化它。
var json = "...."; // your json input
var columnDefs = JSON.parse(json);
for (var i in columnDefs) { // columnDefs is an array, i the index
  var row = columnDefs[i];  // index into columnDefs to get the object
  row.cellClass = myFn(row);
}
var newJson = JSON.stringify(columnDefs); // your json output – skip this step if not needed

0
var keys = Object.keys( columnDefs );
keys.forEach(function(item){
  var col = columnDefs[item]
  col['cellClass'] = myFunction
}

这里没有必要使用Object.keys,是吗? - Ven
colDefs[key] = colArray; 中的每个元素都是未定义的。 - jcubic

0

你需要使用 map 吗?Map 函数可以基于旧数组的转换返回一个新的数组。

var arr = [
  { name: 'Report', field: 'RPT', width: 80 },
  { name: 'Element', field: 'ELEM', width: 200 }
].map(function(element) {
  element.cellClass = myFunction;
  return element;
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接