Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在javascript中按属性值对对象数组进行排序?_Javascript_Arrays_Json_Sorting_Associative Array - Fatal编程技术网

如何在javascript中按属性值对对象数组进行排序?

如何在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": {

具有如下对象数组:

我想按排序器对项目进行排序

这是项的排序规则(itemsArray['item=a37d2733-f710-4e47-8573-6aab11f6d020'])。排序规则

排序后的数组如下所示:

{
 "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);