Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.01.2014, 19:54
Интересующийся
Отправить личное сообщение для vas88811 Посмотреть профиль Найти все сообщения от vas88811
 
Регистрация: 20.12.2013
Сообщений: 22

Сортировка массива по возрастанию другого массива.
Сразу говорю, не уверен, в правильном ли месте завел тему, поэтому если что, извиняюсь.
Такая ситуация. Есть 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.

Надеюсь, меня поймут. Подскажите пожалуйста, что я неправильно делаю.
Ответить с цитированием
  #2 (permalink)  
Старый 11.01.2014, 20:51
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

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)
Ответить с цитированием
  #3 (permalink)  
Старый 12.01.2014, 08:49
Интересующийся
Отправить личное сообщение для vas88811 Посмотреть профиль Найти все сообщения от vas88811
 
Регистрация: 20.12.2013
Сообщений: 22

Большое спасибо! Работает.
И все же также интересно, почему не работает мой вариант..
Ответить с цитированием
  #4 (permalink)  
Старый 12.01.2014, 10:23
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

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

и ваш вариант только для уникальных данных
Ответить с цитированием
  #5 (permalink)  
Старый 12.01.2014, 10:31
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

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)
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка массива grindy Общие вопросы Javascript 5 17.12.2013 08:41
Из одного массива удалить элементы другого... t3mir1an Events/DOM/Window 4 22.10.2013 11:14
Сортировка массива по ключу RazZzeR Элементы интерфейса 9 21.07.2012 19:31
Сортировка двумерного массива методом пузырька lammeR Общие вопросы Javascript 31 01.07.2012 20:48
сортировка массива с сохранением ассоциации индексов HelpeR Элементы интерфейса 1 24.02.2010 11:00