我想将Java HashMap转换为javascript数组,其中键位于javascript对象内。
我试图将 JSON 转换为内部带有数组的 JavaScript 对象。Java 映射看起来像这样<字符串:"序列",对象:圆形>
我要从Java对象(JSON(转换为javascript数组的对象快速概述。
export class Order extends Base {
public createdAt: Date;
public status: OrderStatus;
public rounds: Round[];
}
export class Round extends Base {
public lockable: boolean;
public locked: boolean;
public sequence: number;
public createdAt: string;
public orderedItems?: Item[];
}
我从服务器收到的 JSON:
[
{
"id": "87921b20-232d-4e13-8154-5ecdcdfeea83",
"createdAt": 1556284343924,
"status": "UNPAID",
"rounds": {
"1": {
"id": "ffd791b7-3575-4653-9e65-0d95ed027d37",
"createdAt": 1556284343930,
"lockable": false,
"locked": false,
"orderedItems": []
},
"2": {
"id": "310bbdff-2c41-4e22-96da-46282e158b49",
"createdAt": 1556284343936,
"lockable": true,
"locked": false,
"orderedItems": []
}
}
}
]
现在我想做的事情如下。我认为在 javascript 中不能保证数组的顺序,所以我想在从 API 获取 id 后在对象中添加 id。
"2": <-- MOVE SEQUENCE inside the object like:
{
...
"sequence": "2"
}
我在javascript中找不到其他这样的解决方案,但希望你能给我一个更合适的解决方案:
order.forEach(o => {
const rounds = [];
Object.keys(o.rounds).forEach(key => {
o.rounds[key].sequence = key;
rounds.push(o.rounds[key]);
});
o.rounds = rounds;
});
你收到的 JSON 不包含一个Round
数组;正如你所观察到的,它包含一个地图。查看序列化到此 JSON 的任何内容并更正它以使 JSON 看起来像
[
{
...
"rounds": [
{
"id": "ffd791b7-3575-4653-9e65-0d95ed027d37",
"createdAt": 1556284343930,
"lockable": false,
"locked": false,
"orderedItems": []
},
{
"id": "310bbdff-2c41-4e22-96da-46282e158b49",
"createdAt": 1556284343936,
"lockable": true,
"locked": false,
"orderedItems": []
}
]
}
]
但是,如果您确实需要,您可以执行以下操作:
var out = []
for(var key in obj) {
out[key] = obj[key]
}
你说:"我认为在javascript中数组的顺序是不能保证的"。数组在Javascript中肯定是有序的。您可能正在考虑不是数组的东西?因此,我认为向数组的每个成员添加 sequence
属性几乎没有价值。
不过,如果你真的想,这很简单:
var out = [];
for(var key in obj) {
out[key] = m[key]
out[key].sequence = key
}
这都依赖于键都是数字,或者强制到数字。
Object.values(( 遍历 order.rounds
的值来简化它,然后映射数组以在数组的每个对象中包含 sequence
属性。
const order = [{
"id": "87921b20-232d-4e13-8154-5ecdcdfeea83",
"createdAt": 1556284343924,
"status": "UNPAID",
"rounds": {
"1": {
"id": "ffd791b7-3575-4653-9e65-0d95ed027d37",
"createdAt": 1556284343930,
"lockable": false,
"locked": false,
"orderedItems": []
},
"2": {
"id": "310bbdff-2c41-4e22-96da-46282e158b49",
"createdAt": 1556284343936,
"lockable": true,
"locked": false,
"orderedItems": []
}
}
}];
order.forEach(o => {
const res = Object.values(o.rounds).map((object, index) => {
object['sequence'] = index + 1;
return object;
});
console.log(res)
});