Извините, если это уже было задано, но я искал «связанный массив индекса сортировки javascript» и не нашел ничего удовлетворительного.Связанный массив индекса сортировки Javascript
У меня есть массив имен и другой связанный с индексом массив, который записывает частоту, с которой имена появляются в проходе, и я хочу сортировать оба массива не в алфавитном порядке, а в соответствии с частотами имен - скажем, большинством частыми и наименее частыми. У меня есть следующий бит кода, который выполняет эту работу адекватно, но я думаю, что это выглядит как взлома. Наверняка есть более достойный способ решить, что должно быть довольно распространенной проблемой сортировки.
Я начинаю с массива имен [], например, 6 Johns, 2 Annes, 9 Toms, 12 Andrews, 3 Kristens, 1 Archie и 14 Peters - уже отсортированы по алфавиту и пересчитаны на частоты, а подпрограмма под результатами в массиве индексов к именам и частотным массивам, что позволяет мне отображать имена и частоты в порядке от наивысшего до самого низкого.
var names = ["Andrew", "Anne", "Archie", "John", "Kristen", "Peter", "Tom"];
var frequency = [12, 2, 1, 6, 3, 14, 9];
var holder = [], secondpart = [], numindex = [];
var i;
for (i = 0; i < frequency.length; i++) {
if (frequency[i] < 10) {
holder[i] = "0" + frequency[i] + "!" + i; // add leading zeros as required
}
if (frequency[i] > 9) {
holder[i] = frequency[i] + "!" + i; // no leading zeros required
}
}
holder.sort();
holder.reverse();
for (i = 0; i < holder.length; i++) {
secondpart[i] = holder[i].substring(holder[i].indexOf("!") + 1, holder[i].length);
numindex[i] = parseInt(secondpart[i]);
}
Теперь я могу перечислить оба массива в соответствии с названиями частот.
var txt = "";
var useindex;
for (i = 0; i < numindex.length; i++) {
useindex = numindex[i];
txt = txt + names[useindex] + " - " + frequency[useindex] + "<br>";
}
У кого-нибудь еще была эта проблема и как вы ее разрешили.
Вы можете передать функцию обратного вызова для '.sort()' для руководства, как работает сортировка. – Pointy
Что такое «* связанный с индексом массив»? Звучит как [параллельный массив] (https://en.wikipedia.org/wiki/Parallel_array), но я не уверен. – Bergi
Вы должны использовать объекты («кортежи», если хотите) вместо сериализации ваших данных в строки. – Bergi