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

时间:2016-02-01 16:16:51

标签: javascript json angular-ui-grid

如何将对象附加到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 } ]

必须有一种更简单,更好的方法吗?

4 个答案:

答案 0 :(得分:3)

尝试:

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

答案 1 :(得分: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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

地图是你需要的吗? Map基于转换旧数组返回一个新数组。

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