根据值对Javascript对象进行排序

时间:2018-01-03 16:55:54

标签: javascript arrays json object

我有这个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);

1 个答案:

答案 0 :(得分:1)

与您的问题的第一条评论一致,您应该用数组替换您的对象并删除冗余。 该位置将由数组中元素的位置决定,元素的键将不再与您的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)