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