Я подозреваю, что это может быть связано с тем, как я построил свой массив, но из-за недостатка знаний я не уверен в причине.
Если у вас есть контроль над тем, как строится ваш массив, я бы предложил изменить структуру объекта:
let input = [
{ "Name": "Avobath", "Count": "5" },
{ "Name": "DragonsEgg", "Count": "3" },
{ "Name": "Intergalactic", "Count": "2" },
{ "Name": "Twilight", "Count": "9" },
{ "Name": "SexBomb", "Count": "6" },
{ "Name": "TheExperimenter", "Count": "6" },
{ "Name": "TurtleImmersion", "Count": "5" },
{ "Name": "Butterball", "Count": "3" },
{ "Name": "MarshmallowWorld", "Count": "0" },
{ "Name": "ThinkPink", "Count": "2" }
];
input.sort((a, b) => +b.Count - +a.Count);
console.log(input);
Это не только упрощает сортировку по количеству, но и делает ваш код чище (и понятнее).
Скажем таквозможно, вы захотите отсортировать массив по алфавиту:
let input = [
{ "Name": "Avobath", "Count": "5" },
{ "Name": "DragonsEgg", "Count": "3" },
{ "Name": "Intergalactic", "Count": "2" },
{ "Name": "Twilight", "Count": "9" },
{ "Name": "SexBomb", "Count": "6" },
{ "Name": "TheExperimenter", "Count": "6" },
{ "Name": "TurtleImmersion", "Count": "5" },
{ "Name": "Butterball", "Count": "3" },
{ "Name": "MarshmallowWorld", "Count": "0" },
{ "Name": "ThinkPink", "Count": "2" }
];
input.sort((a, b) => a.Name.localeCompare(b.Name));
console.log(input);
Чтобы это работало в вашей первоначальной структуре, вам нужно сделать следующее:
input.sort((a ,b) => Object.keys(a)[0].localeCompare(Object.keys(b)[0]));
Что не очень красиво выглядит, вмое мнение.
Скажем также, что теперь вы решили добавить еще одно свойство к вашим объектам.Затем вы обнаружите, что ваша сортировка больше не работает:
let input = [
{AnotherProp: "13", Avobath_Count: "5"},
{AnotherProp: "-1", DragonsEgg_Count: "3"},
{AnotherProp: "7", Intergalactic_Count: "2"},
{AnotherProp: "5", Twilight_Count: "9"},
{AnotherProp: "11", SexBomb_Count: "6"},
{AnotherProp: "2", TheExperimenter_Count: "6"},
{AnotherProp: "0", TurtleImmersion_Count: "5"},
{AnotherProp: "4", Butterball_Count: "3"},
{AnotherProp: "6", MarshmallowWorld_Count: "0"},
{AnotherProp: "1", ThinkPink_Count: "2"}
];
input.sort((a ,b) => Object.values(b)[0] - Object.values(a)[0]);
console.log(input);
Этого никогда не произойдет, если вы сохраните Name
и Count
как отдельные свойства, как предлагалось ранее.Я мог бы продолжать упоминать другие примеры, в которых ваша текущая структура объекта может усложнить вам задачу (и другим, пытающимся прочитать ваш код), но я думаю, этого уже достаточно.