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