Прежде всего, действительно сложно понять структуру объекта.Это то, на что это похоже?
[
{ "46913872:2:Size" : 10 },
{ "46913872:2:Hollow-to-Hem": 57},
{ "46913872:1:Hips" : "34"}, ...
]
Похоже, вы хотите, чтобы он сортировался в
[
{ "46913872:1:Hips" : "34"}, // all ids are the same here, but this index is 1
{ "46913872:2:Hollow-to-Hem": 57}, // index is 2 but Hollow comes before Size
{ "46913872:2:Size" : 10 },
]
Следующее решение работает, если я понял структуру вашего объекта.Как сказал ThatSteveGuy, вы можете передать компаратор в ваш метод сортировки.Поскольку объект настолько сложен, это то, что вы бы сделали
attributes.sort(function(a, b){
// Make sense of your objects a and b. See the inner function defined below
var newA = improveObject(a);
var newB = improveObject(b);
if (newA.id > newB.id) { return 1; }
if (newA.id < newB.id) { return -1; }
// id is the same, check index
if (newA.index > newB.index) { return 1; }
if (newA.index < newB.index) { return -1; }
// index is the same, check name
if (newA.name > newB.name) { return 1; }
if (newA.name < newB.name) { return -1; }
// it's the same thing
return 0;
// Turns { "46913872:2:Size" : 10 }
// into {id: 46913872, index: 2, name: "Size", value: 10}
function improveObject(obj) {
for (var key in obj) {
var pieces = key.split(":");
return {
id: parseInt(pieces[0]),
index: parseInt(pieces[1]),
name: pieces[2],
value: obj[key];
};
}
}
});
Однако объект действительно не имеет смысла.Я призываю вас переосмыслить его структуру.Даже если я не до конца понял ваш объект (вы должны были указать фактический json для этого объекта), этот пример говорит вам все, что вам нужно знать о сортировке в js.