Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Сортировка массива по возрастанию другого массива. (https://javascript.ru/forum/events/44223-sortirovka-massiva-po-vozrastaniyu-drugogo-massiva.html)

vas88811 11.01.2014 19:54

Сортировка массива по возрастанию другого массива.
 
Сразу говорю, не уверен, в правильном ли месте завел тему, поэтому если что, извиняюсь.
Такая ситуация. Есть 2 массива.
var arr3 = [5, 8, 6, 9];
var arr4 = [1, 3, 7, 5];

Нужно, arr3 отсортировать в соответствии с элементами другого массива по убыванию. То есть, arr4 по убыванию будет 7, 5, 3, 1. Нужно чтобы новый массив был соответсвенно 6, 9, 8, 5.
Мой код не работает

var arr3 = [5, 8, 6, 9];
var arr4 = [1, 3, 7, 5];
var arr5 = arr4.sort(function(a,b){return b - a});
var arr6 = [];

for (var n=0;n<arr5.length;n++){
for (var x=0;x<arr4.length;x++){
if (arr4[n]==arr5[x]) {
arr6.push(arr3[x]);
}

arr6 по задумке должен быть отсортированным нужным мне образом массивом arr3, но
arr6 остается в точности такой же, как arr3 изначально, то есть 5, 8, 6, 9.

Надеюсь, меня поймут. Подскажите пожалуйста, что я неправильно делаю.

рони 11.01.2014 20:51

vas88811,:-?
var arr3 = [5, 8, 6, 9];
 var arr4 = [1, 3, 7, 5];
 arr4.forEach(function (el, i, arr)
{
  arr[i] = [arr[i],arr3[i]]
})
arr4.sort(function(a,b){return b[0] - a[0]});
var arr6 = arr4.map(function (el, i, arr)
{
arr[i]=el[0];
return el[1]
})
alert(arr4+'\n'+arr6)

vas88811 12.01.2014 08:49

Большое спасибо! Работает.
И все же также интересно, почему не работает мой вариант..

рони 12.01.2014 10:23

Цитата:

Сообщение от vas88811
почему не работает мой вариант..

не уничтожайте структуру arr4 - sort Данный метод изменяет исходный массив

и ваш вариант только для уникальных данных

рони 12.01.2014 10:31

vas88811,
var arr3 = [5, 8, 6, 9];
 var arr4 = [1, 3, 7, 5];
 var arr5 = [];
 for (var x=0;x<arr4.length;x++){
    arr5[x] = arr4[x] //сохраняем структуру arr4 в arr5
 }
 arr4.sort(function(a,b){return b - a});
 var arr6 = [];
 for (var n=0;n<arr5.length;n++){
 for (var x=0;x<arr4.length;x++){
 if (arr4[n]==arr5[x]) {
 arr6.push(arr3[x]);
 } }}
 alert(arr4+'\n'+arr6)


Часовой пояс GMT +3, время: 14:02.