Я использую массив объектов json из поискового веб-сервиса для подачи автозаполнения jQuery.ui, где я использую систему категорий для группировки своих объектов по их «семейству»
Алгоритм использует список, в котором группы уже упорядочены, что я не могу сделать в данный момент, поэтому я хотел бы организовать данные на стороне клиента.Так, например, если у меня есть следующий массив:
var resultsArray = [
{"cat": "Category #1", "Id": "10"},
{"cat": "Category #2", "Id": "28"},
{"cat": "Category #1", "Id": "11"},
{"cat": "Category #2", "Id": "21"},
{"cat": "Category #1", "Id": "13"}
];
, я бы хотел вызвать метод resultsArray, чтобы я вернулся
resultsArray = [
{"cat": "Category #1", "Id": "10"},
{"cat": "Category #1", "Id": "11"},
{"cat": "Category #1", "Id": "13"},
{"cat": "Category #2", "Id": "28"},
{"cat": "Category #2", "Id": "21"}
];
, группируя по свойству cat, сохраняя при этомсуществующий порядок.
Сначала я попытался использовать метод сортировки в массиве, возвращая позиции в массиве, в которых будет найдено значение, по которому я пытаюсь сгруппировать (предположим, что acs.groupBy содержит имясвойства группировки:
items.sort(function(a, b) {
var aValue = a[acs.groupBy],
bValue = b[acs.groupBy];
var indexOfAValue = 0; // should be sthing like items.indexWhere(item[acs.groupBy] === aValue)
var indexOfBValue = 0; // same thing
return indexOfAValue - indexOfBValue;
});
с indexOfAValue будет первой позицией в массиве, где будет найдено свойство группировки для A, но я не могу найти метод для получения и кэширования этого значения просто (массивindexOf соответствует целому объекту.) Любая идея, чтобы получить это?
РЕДАКТИРОВАТЬ
Похоже, я дал неправильный пример :) Я не хочусортировать категории.Если Категория # 2 происходит раньше, чем Категория # 1, я хочу сохранить эту информацию, чтобы
var resultsArray = [
{"cat": "Category #3", "Id": "39"},
{"cat": "Category #2", "Id": "28"},
{"cat": "Category #1", "Id": "11"},
{"cat": "Category #2", "Id": "21"},
{"cat": "Category #1", "Id": "18"}
]
стал (обратите внимание, что хотя я сгруппировал элементы по их категории, я не изменил порядок вкакие категории встречаются, и я не менял порядок элементов внутри групп в соответствии с их идентификатором)
var resultsArray = [
{"cat": "Category #3", "Id": "39"},
{"cat": "Category #2", "Id": "28"},
{"cat": "Category #2", "Id": "21"},
{"cat": "Category #1", "Id": "11"},
{"cat": "Category #1", "Id": "18"}
]
Вот почему я пытался упорядочить по indexOf (категория) в моем примере выше