有一个像这样的对象数组:
我想通过sortOrder对itemsArray进行排序。
这是item的sortOrder(itemsArray ['item = a37d2733-f710-4e47-8573-6aab11f6d020']。sortOrder)
{
"Items": [
{
"sectionId": "section=38",
"itemsArray": {
"item=a37d2733-f710-4e47-8573-6aab11f6d020": {
"itemObject": {
"description": "Really good food.",
"price": 1000,
"name": "Cappuccino",
"SKey": "item=a37d2733-f710-4e47-8573-6aab11f6d020",
},
"sortOrder": 3
},
"item=bd844a27-0a00-445d-a40a-785cf16fwine": {
"itemObject": {
"description": "Really good wine.",
"price": 3000,
"name": "Red Wine",
"SKey": "item=bd844a27-0a00-445d-a40a-785cf16fwine",
},
"sortOrder": 1
},
"item=a37d2733-f710-4e47-8573-6aab11f6d016": {
"itemObject": {
"description": "Really good drink.",
"price": 1000,
"name": "Orange Juice",
"SKey": "item=a37d2733-f710-4e47-8573-6aab11f6d016",
},
"sortOrder": 2
},
"item=bd844a27-0a00-445d-a40a-785cf16f4950": {
"itemObject": {
"description": "Really good drink.",
"price": 1000,
"name": "Coca-Cola - sanjy",
"SKey": "item=bd844a27-0a00-445d-a40a-785cf16f4950",
},
"sortOrder": 0
}
},
"description": "Non-alcoholic beverages.",
"sectionName": "Beverages",
}
]
}
排序数组之后会是这样的:
{
"Items": [
{
"sectionId": "section=38",
"itemsArray": {
"item=bd844a27-0a00-445d-a40a-785cf16f4950": {
"itemObject": {
"description": "Really good drink.",
"price": 1000,
"name": "Coca-Cola - sanjy",
"SKey": "item=bd844a27-0a00-445d-a40a-785cf16f4950",
},
"sortOrder": 0
},
"item=bd844a27-0a00-445d-a40a-785cf16fwine": {
"itemObject": {
"description": "Really good wine.",
"price": 3000,
"name": "Red Wine",
"SKey": "item=bd844a27-0a00-445d-a40a-785cf16fwine",
},
"sortOrder": 1
},
"item=a37d2733-f710-4e47-8573-6aab11f6d016": {
"itemObject": {
"description": "Really good drink.",
"price": 1000,
"name": "Orange Juice",
"SKey": "item=a37d2733-f710-4e47-8573-6aab11f6d016",
},
"sortOrder": 2
},
"item=a37d2733-f710-4e47-8573-6aab11f6d020": {
"itemObject": {
"description": "Really good food.",
"price": 1000,
"name": "Cappuccino",
"SKey": "item=a37d2733-f710-4e47-8573-6aab11f6d020",
},
"sortOrder": 3
}
},
"description": "Non-alcoholic beverages.",
"sectionName": "Beverages",
}
]
}
我已经在尝试使用array.sort方法,但没有成功。所以,如果有人有解决方案,那么它是有帮助的。
我会考虑重构JSON是可排序的,例如:
{
"Items": [
{
"sectionId": "section=38",
"sectionName": "Beverages",
"description": "Non-alcoholic beverages.",
"itemsArray": [
{
"id": "item=a37d2733-f710-4e47-8573-6aab11f6d020",
"description": "Really good food.",
"price": 1000,
"name": "Cappuccino",
"sortOrder": 3
},
{
"id": "item=bd844a27-0a00-445d-a40a-785cf16fwine",
"description": "Really good wine.",
"price": 3000,
"name": "Red Wine",
"sortOrder": 1
},
{
"id": "item=a37d2733-f710-4e47-8573-6aab11f6d016",
"description": "Really good drink.",
"price": 1000,
"name": "Orange Juice",
"sortOrder": 2
},
{
"id": "item=bd844a27-0a00-445d-a40a-785cf16f4950",
"description": "Really good drink.",
"price": 1000,
"name": "Coca-Cola - sanjy",
"sortOrder": 0
}
]
}
]
}
这可以使用sort:Items[0].itemsArray.sort((a, b) => a.sortOrder - b.sortOrder)
按升序排序。
更改包括使itemsArray
成为一个数组,并将item id移动到itemsArray的每个项目中的自己的属性中。
我不建议按对象排序,因为对象键的排序顺序在历史上是无保证的。但是以下函数可能会对json对象进行排序,因为当前它具有结构化,改编自this Stack Overflow answer:
function sortObject(o) {
var sorted = {},
key, a = [];
for (key in o) {
if (o.hasOwnProperty(key)) {
a[o[key].sortOrder] = key;
}
}
for (key = 0; key < a.length; key++) {
sorted[a[key]] = o[a[key]];
}
return sorted;
}
json.Items[0].itemsArray = sortObject(json.Items[0].itemsArray);
sortOrder
的0...n
属性,因为它通过添加到array[sortOrder]
而不是array.push
来填充数组,然后迭代该数组以填充结果对象。这是一个尝试,看看并阅读评论
var data = {
"Items": [
{
"sectionId": "section=38",
"itemsArray": {
"item=a37d2733-f710-4e47-8573-6aab11f6d020": {
"itemObject": {
"description": "Really good food.",
"price": 1000,
"name": "Cappuccino",
},
"sortOrder": 3
},
"item=bd844a27-0a00-445d-a40a-785cf16fwine": {
"itemObject": {
"description": "Really good wine.",
"price": 3000,
"name": "Red Wine",
},
"sortOrder": 1
},
"item=a37d2733-f710-4e47-8573-6aab11f6d016": {
"itemObject": {
"description": "Really good drink.",
"price": 1000,
"name": "Orange Juice",
},
"sortOrder": 2
},
"item=bd844a27-0a00-445d-a40a-785cf16f4950": {
"itemObject": {
"description": "Really good drink.",
"price": 1000,
"name": "Coca-Cola - sanjy",
},
"sortOrder": 0
}
},
"description": "Non-alcoholic beverages.",
"sectionName": "Beverages",
}
]
}
data.Items.forEach((item)=> {
var array = item.itemsArray;
// sort the array.
var keys= Object.keys(array).sort((a, b)=> {
return array[a].sortOrder - array[b].sortOrder
});
// and now create the new itemsArray
var _itemsArray= {};
keys.forEach((key)=> _itemsArray[key] =array[key])
// last assign the itemsArray
item.itemsArray = _itemsArray;
});
console.log(data.Items)