【问题标题】:Sort a Javascript object based on value [duplicate]根据值对Javascript对象进行排序[重复]
【发布时间】:2018-01-03 16:55:54
【问题描述】:

我有这个 json 对象:

obj = {
    "name":
    {
        "display": "Name",
        "id": "name",
        "position": 3           
    },
    "type":
    {
        "id": "type",
        "position": 0
    },
    "id":
    {
        "display": "ID",
        "id": "id",
        "position": 1
    }
    "key":
    {
        "display": "Key",
        "id": "key",
        "position": 2
    },

}

是否可以根据位置编号对其进行排序,而不将其转换为数组? 我试图转换它,但它改变了格式(它删除了名称、类型、id、键),我不想要这个。它应该保持原样(格式),但只是根据它们的位置排列。

我做了什么:

var array = $.map(obj, function(value, index) {
            return [value];
        });

        array.sort(function(a,b){
            return a.position - b.position;
        });
        obj= JSON.stringify(array);
        obj= JSON.parse(obj);

【问题讨论】:

  • 对象没有顺序,必须使用数组
  • 您是否尝试过寻找答案? stackoverflow.com/a/5525820/482868
  • @Vic 不能交换钥匙的位置??
  • @johnmmm 不,这是不可能的
  • 不幸的是,这是不可能的

标签: javascript arrays json object


【解决方案1】:

与您问题的第一个 cmets 一致,您应该用数组替换您的对象并删除冗余。 位置将由数组中元素的位置确定,元素的键将不再与您的 id 属性重复

编辑: 使用此代码,您可以对对象进行排序,但您不能使用 id 作为键,否则它将再次按字母顺序而不是位置排序。

    let obj = {
    "name":
    {
        "display": "Name",
        "id": "name",
        "position": 3           
    },
    "type":
    {
        "id": "type",
        "position": 0
    },
    "id":
    {
        "display": "ID",
        "id": "id",
        "position": 1
    },
    "key":
    {
        "display": "Key",
        "id": "key",
        "position": 2
    },
    }
    
    let arr = [];
    for(let i in obj) {
    	if(obj.hasOwnProperty(i)) {
    		arr[obj[i].position] = obj[i]
       }
    }
    
    
    let sortedObj = {};
    for(let i in arr) {
    	sortedObj[i] = arr[i]
    }
    
    console.log(sortedObj)

【讨论】:

  • 我需要它是这样的,因为这是代码的一小部分,如果我更改 json,那么其余代码将无法工作.. 我不能只交换位置基于位置编号的键??
  • 您应该将您的 json 转换为数组,按照您的方式对其进行排序,并在遍历该数组时创建一个新的 json 对象。
  • 关于如何将其重新转换为 json 并具有相同结构的任何线索?
  • 答案已编辑(添加了代码 sn-p)
  • 也就是说没有办法在不丢失id的情况下对其进行排序?
猜你喜欢
  • 1970-01-01
  • 2017-04-06
  • 2014-05-29
  • 2023-03-15
  • 1970-01-01
  • 2021-10-14
  • 2018-03-29
  • 2018-11-01
  • 1970-01-01
相关资源
最近更新 更多