如何将对象附加到 Javascript JSON 对象

How to append an object to a Javascript JSON object

如何将对象附加到 Javascript JSON 对象

我有一个javascript对象,它以对象数组的形式包含JSON,如:

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

我需要添加

cellClass: myFunction 

到 columnDefs 对象数组中的每个单独的列 def,所以它就像:

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

请注意,myFunction 不应包含在引号中。由于每一列 def 都是一个对象,而不是一个数组,我知道我需要先将它转换为一个数组,然后才能向其中添加任何内容:

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

一定有更简单更好的方法吗?

您可能对 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
var keys = Object.keys( columnDefs );
keys.forEach(function(item){
  var col = columnDefs[item]
  col['cellClass'] = myFunction
}

尝试:

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

地图是您需要的吗?映射returns一个基于转换旧数组的新数组。

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