一点背景。我有一个Spring项目设置来做一些网络抓取,我想用图形显示一些数据。该服务已设置并返回我正在构建的网页的模型和视图。
我对解决这个问题的不同方法持开放态度,但这是我的第一个方法。
我使用Spring将所有数据放入返回的网页中,并考虑将其过滤到不同的视图中(而不是多次提供数据(。
我遇到的问题是spring返回了一个表示实体的JSON对象列表。
const allData = [{ "name": "oxygen", "orderId": "1", "price": 1.1, "available": 1, "remaining": 1, "room": "E1W1", "date": "2021-06-10T00:00:00.000+01:00", "orderType": "BUY", "shard": "SHARD_0" },
{ "name": "silicon", "orderId": "2", "price": 2.2, "available": 2, "remaining": 2, "room": "N1E2", "date": "2021-06-10T00:00:00.000+01:00", "orderType": "SELL", "shard": "SHARD_2" }];
我决定尝试使用的图表是https://developers.google.com/chart/interactive/docs/basic_load_libs它正在寻找形式的数据
const toBe = [
['Date', 'Price'],
['2004', 1000],
['2005', 1170],
['2006', 660],
['2007', 1030]
];
我的第一种方法是使用这两个函数进行转换,但它会导致我的浏览器崩溃(内存不足,我做得很好(。
// Json object to array
function objectToArray(obj) {
const keys = Object.keys(obj);
const res = keys;
for (let i = 0; i < keys.length; i++) {
res.push(obj[keys[i]]);
};
return res;
};
// Converts List of Json to array of arrays.
function listToGraphData(obj) {
let res;
res.push(Object.keys(obj[0]));
for (let i = 0; i < obj.length; i++) {
res.push(objectToArray(obj[i]));
}
return res;
}
如何修复我的javascript或找到更好的解决方案?
函数objectToArray
永远不会结束,浏览器将崩溃:
function objectToArray(obj) {
const keys = Object.keys(obj);
const res = keys;
for (let i = 0; i < keys.length; i++) {
res.push(obj[keys[i]]);
};
return res;
};
试试这个:
function objectToArray(obj) {
const res = Object.keys(obj).map((key) => {
return obj[key];
});
return res;
};
或者简单地说:
function objectToArray(obj) {
const res = Object.values(obj);
return res;
};
并且函数listToGraphData
不应该工作,因为这两行不工作:
let res;
res.push(Object.keys(obj[0])); // Undefined can't push
res
未定义,不能有push
方法。
感谢@Sega的帮助。我终于把它写成
function objectToArray( obj) {
// const keys = Object.keys(obj);
const res = Object.values(obj);
return res;
};
function listToGraphData(obj){
let res=[Object.keys(obj[0])]; // Needed to make keys an array.
for(let i=0; i<obj.length; i++){
res.push(objectToArray(obj[i]));
}
return res;
}