如何将对象附加到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 } ]
必须有一种更简单,更好的方法吗?
答案 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;
});