Задать вопрос
JimmiJanger
@JimmiJanger
Любопытный активист, под маской ленивого нуба.

Как написать сортировку?

К примеру имеется массив неких объектов:
{     
     "A7"  : [14, 2],
     "A8"  : [17, 2],
     "A9"  : [17, 8],
     "A10": [20, 8],
     "A1"  : [  2, 2],
     "A4"  : [  8, 2],
     "A3"  : [  5, 2],
     "A5"  : [  8, 8],
     "A6"  : [11, 2],
     "A2"  : [  2, 8],
}

p.s. [2, 8] - координаты объекта. (2 - координата оси X, 8 - координата оси Y)

Я могу сортировать, по одной из осей ... Но как сделать так, что бы сортировка происходила именно по двум осям... Я не могу понять ...
Суть в том, что в начале сортировка должна идти по оси Х, а потом по оси У ...

Сортировка в итоге должна выдать A1, A2, A3, A4, ....
  • Вопрос задан
  • 118 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
rework
@rework
Помог ответ? В благодарность отметь его решением
у вас должен быть массив объектов, а не один объект, для него можно написать функцию сортировки:

let arr = [
	{"A7" : [14, 2]},
	{"A8" : [17, 2]},
	{"A9" : [17, 8]},
	{"A10": [20, 8]},
	{"A1" : [ 2, 2]},
	{"A4" : [ 8, 2]},
	{"A3" : [ 5, 2]},
	{"A5" : [ 8, 8]},
	{"A6" : [11, 2]},
	{"A2" : [ 2, 8]}
];

arr.sort((a,b) => {
	a = Object.values(a)[0];
	b =  Object.values(b)[0];
	if (a[0] > b[0]) return 1;
	if (a[0] == b[0]) return (a[1] > b[1]);
	if (a[0] < b[0]) return 0; 
});


https://jsfiddle.net/no14aq17/
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Для начала, у вас не массив, а объект, он не сортируется.
А для сортировки массива необходимо составить функцию от двух аргументов, которая вернёт число меньше нуля, если первый аргумент должен быть в массиве раньше второго, ноль если аргументы равны и число больше нуля если первый аргумент болжен идти после второго. А потом использовать эту функцию при вызове sort().
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы