Suren97 Ответов: 1

Javascript: как сортировать массив без перемещения чисел -1


У меня есть массив` [-1,150,190,170,-1,-1,160,180]. Мне нужно отсортировать этот массив, но без перемещения чисел -1, поэтому он вернет [-1,150,160,170,-1,-1,180,190].Как я могу это сделать?

Что я уже пробовал:

Я уже пробовал вот так`

function solution(x){	
	var arr = [];
	for(var i = 0; i < x.length; i++){
		if(x[i] != -1){
			arr.push(x[i]);
		}
	}
	arr = arr.sort(function(a,b){return a-b});
	var arr2 = [];
	for(var i = 0; i < x.length; i++){
		if(x[i] == -1){
			arr2.push(x[i]);
		}
		else{
			arr2.push(?);
		}
	}
	return arr2;
}
console.log(solution([-1,150,190,170,-1,-1,180,160]));

1 Ответов

Рейтинг:
5

Patrice T

Вот как я это вижу:

In= [-1,150,190,170,-1,-1,160,180];
// here you build a filtered array without the -1 numbers
Filtered= [150,190,170,160,180];
// here do a normal sort
Sorted= [150,160,170,180,190];
// here build the Out array by merging the -1 from In and the values from Sorted
Out= [-1,150,160,170,-1,-1,180,190];

[Обновление]
Хорошее начало, теперь вам нужно построить массив относительно позиций -1 в оригинале
function solution(x){	
	var arr = [];
	for(var i = 0; i < x.length; i++){
		if(x[i] != -1){
			arr.push(x[i]);
		}
	}
	arr = arr.sort(function(a,b){return a-b});
	// here you need to build out array
	// Just like you filtered x earlier, you need to loop again in x
	// when you encounter a -1, push it in out array
	// otherwise get next value from arr
	return arr;
}
console.log(solution([-1,150,190,170,-1,-1,180,160]));


Suren97

Таким образом, я могу фильтровать массив и удалять только -1, а затем сортировать этот массив. но тогда как я могу поставить -1 числа после сортировки?

Patrice T

Нет, вы создаете новый массив, который заполняете значениями, отличными от -1, вы не касаетесь исходного массива.

Suren97

Что ты имеешь в виду? :(

Suren97

Слушай, я обновил свое решение, ты имеешь в виду вот так?

Suren97

В этом случае я получил сортированный массив, но теперь как я могу заполнить в нем числа -1?

Suren97

Какое из массива означает?

Patrice T

Это имя я дал результирующему массиву потому что мне нужно сохранить x и arr

Suren97

Я снова обновился, теперь вместо чего мне писать ? знак

Patrice T

вам нужна новая переменная, начинающаяся с 0, это будет индекс для arr
В чем дело ? вам нужно получить значение из arr, а затем увеличить индекс.

Suren97

Omg,,,наконец-то, большое вам спасибо :)

Patrice T

Теперь, когда у тебя есть решение, неужели все так сложно ? :)

Если мое решение (с комментариями) было полезным, вы можете принять его, оно закроет вопрос как решенный.
Вы также можете опубликовать свое собственное решение и принять его.