如何在javascript中按属性值对对象数组进行排序?
具有如下对象数组: 我想按排序器对项目进行排序 这是项的排序规则(itemsArray['item=a37d2733-f710-4e47-8573-6aab11f6d020'])。排序规则 排序后的数组如下所示:如何在javascript中按属性值对对象数组进行排序?,javascript,arrays,json,sorting,associative-array,Javascript,Arrays,Json,Sorting,Associative Array,具有如下对象数组: 我想按排序器对项目进行排序 这是项的排序规则(itemsArray['item=a37d2733-f710-4e47-8573-6aab11f6d020'])。排序规则 排序后的数组如下所示: { "Items": [ { "sectionId": "section=38", "itemsArray": { "item=bd844a27-0a00-445d-a40a-785cf16f4950": { "itemObject": {
{
"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",
}
]
}
我已经在这里尝试使用数组.sort方法,但没有成功。所以,如果任何人都有一个解决方案,那么它是有帮助的。 < P>我会考虑重构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
设置为数组,并将项id移动到itemsArray的每个项中它自己的属性中
我不建议按对象排序,因为对象键的排序顺序在历史上一直没有保证。但以下函数可能会按照您当前的结构对json对象进行排序,改编自:
函数sortObject(o){
var排序={},
键,a=[];
用于(输入o){
如果(o.hasOwnProperty(键)){
a[o[key].sortOrder]=键;
}
}
用于(键=0;键
请注意,假设JSON对象具有从<代码> 0…n>代码>的<代码> SoTrOrth</代码>属性,因为它通过添加到<代码>数组[SoTrOrt] 而不是<代码>数组。填充Pase<代码>,然后重复该数组来填充结果对象。
我会考虑重构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
设置为数组,并将项id移动到itemsArray的每个项中它自己的属性中
我不建议按对象排序,因为对象键的排序顺序在历史上一直没有保证。但以下函数可能会按照您当前的结构对json对象进行排序,改编自:
函数sortObject(o){
var排序={},
键,a=[];
用于(输入o){
如果(o.hasOwnProperty(键)){
a[o[key].sortOrder]=键;
}
}
用于(键=0;键
请注意,这假设您的json对象具有来自
0…n
的sortOrder
属性,因为它通过添加到array[sortOrder]
而不是array来填充数组。按下,然后迭代该数组以填充结果对象。这里是一个尝试,请查看并阅读注释
var数据={
“项目”:[
{
“sectionId”:“section=38”,
“itemsArray”:{
“项目=a37d2733-f710-4e47-8573-6aab11f6d020”:{
“项目对象”:{
“描述”:“真的很好吃。”,
“价格”:1000美元,
“名称”:“卡布奇诺”,
},
“巫师”:3
},
“项目=bd844a27-0a00-445d-a40a-785cf16fwine”:{
“项目对象”:{
“描述”:“非常好的葡萄酒”,
“价格”:3000美元,
“名称”:“红酒”,
},
“巫师”:1
},
“项目=a37d2733-f710-4e47-8573-6aab11f6d016”:{
“项目对象”:{
“描述”:“非常好的饮料。”,
“价格”:1000美元,
“名称”:“橙汁”,
},
“巫师”:2
},
“项目=bd844a27-0a00-445d-a40a-785cf16f4950”:{
“项目对象”:{
“描述”:“非常好的饮料。”,
“价格”:1000美元,
“名称”:“可口可乐-三一”,
},
“排序器”:0
}
},
“说明”:“非酒精饮料”,
“部门名称”:“饮料”,
}
]
}
data.Items.forEach((item)=>{
var数组=item.itemsArray;
//对数组进行排序。
var keys=Object.keys(数组).sort((a,b)=>{
返回数组[a]。排序器-数组[b]。排序器
});
//现在创建新的项目sarray
var_itemsArray={};
keys.forEach((key)=>\u itemsArray[key]=数组[key])
//最后分配项数组
item.itemsArray=\u itemsArray;
});
console.log(data.Items)
这里是一个尝试,看看并阅读注释
var数据={
“项目”:[
{
“sectionId”:“section=38”,
“itemsArray”:{
“项目=a37d2733-f710-4e47-8573-6aab11f6d020”:{
“项目对象”:{
“描述”:“真的很好吃。”,
“价格”:1000美元,
“名称”:“卡布奇诺”,
},
“巫师”:3
},
“项目=bd844a27-0a00-445d-a40a-785cf16fwine”:{
“项目对象”:{
“描述”:“非常好的葡萄酒”,
“价格”:3000美元,
“名称”:“红酒”,
},
“巫师”:1
},
“项目=a37d2733-f710-4e47-8573-6aab11f6d016”:{
“项目对象”:{
“描述”:“非常好的饮料。”,
“价格”:1000美元,
“名称”:“橙汁”,
},
“巫师”:2
},
“项目=bd844a27-0a00-445d-a40a-785cf16f4950”:{
“项目对象”:{
“描述”:“非常好的饮料。”,
“价格”:1000美元,
“名称”:“可口可乐-三一”,
},
“排序器”:0
}
},
“说明”:“非酒精饮料”,
“部门名称”:“饮料”,
}
]
}
data.Items.forEach((item)=>{
var数组=item.itemsArray;
//对数组进行排序。
var keys=Object.keys(数组).sort((a,b)=>{
返回数组[a]。排序器-数组[b]。排序器
});
//现在创建新的项目sarray
var_itemsArray={};
keys.forEach((key)=>\u itemsArray[key]=数组[key])
//最后分配项数组
item.itemsArray=\u itemsArray;
});
console.log(data.Items)
看起来您正在尝试对对象中的键进行排序,而不是对对象数组进行排序,
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);