Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Сортировка элементов разных массивов (https://javascript.ru/forum/misc/66245-sortirovka-ehlementov-raznykh-massivov.html)

DivMan 03.12.2016 10:49

Сортировка элементов разных массивов
 
Есть массив, в котором массивы.
Как их отсортировать, что бы после сортировки, они выводились по убыванию возраста?

Сейчас такой вид

var arr = [
	['26', 'firstname1', 'lastname1'],
	['14', 'firstname2', 'lastname2'],
	['22', 'firstname3', 'lastname3'],
	['23', 'firstname4', 'lastname4'],
	['20', 'firstname5', 'lastname5']
]


А как сделать такой?

var arr = [
        ['26', 'firstname1', 'lastname1'],
        ['23', 'firstname4', 'lastname4'],
        ['22', 'firstname3', 'lastname3'],
        ['20', 'firstname5', 'lastname5'],
        ['14', 'firstname2', 'lastname2']
]

рони 03.12.2016 10:55

DivMan,
(a,b) => b[0] - a[0]

DivMan 03.12.2016 17:59

Надо отсортировать массивы, по убыванию возраста. Я их отсортировал, но почему они не отсортировались?

Входить надо, через контакт

http://plnkr.co/edit/IbIIILTDthMoKtoO9Yhc?p=preview

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
<script src="http://vk.com/js/api/openapi.js"></script>

	<script>

	function foo() {

	VK.init({
			apiId: 5580872
		});


	VK.Auth.login(function(response){
	
		if(response.session){
		 
		 
	
			VK.api('friends.get', {'user_id' : '26291131', 'fields' : 'bdate'}, response => {
				if(response.error){
					alert(response.error.error_msg);
				}
				else{
					let userData = response.response;
					var arrUser = []
					var arrAge = [];
					var arrAge2 = [];
					var now = new Date(); 
					var god = now.getFullYear()
					
					
					
					
					for(var h = 0; h < userData.length; h++){
						arrUser.push(userData[h].first_name + ' ' + userData[h].last_name)
						
						if(typeof userData[h].bdate == 'string' && userData[h].bdate.split('.')[2]){
						arrAge.push(userData[h].first_name + ' ' + userData[h].last_name + ' ' + (god - parseInt((userData[h].first_name + ' ' + userData[h].last_name + ' ' + userData[h].bdate.split('.')[2]).split(' ')[2])))
							
						}
					}
					
					for(var c = 0; c < arrAge.length; c++){
						arrAge2.push(arrAge[c].split(' '))
						
					}
					
					
					//сортировка по возрасту
					
					arrAge2.sort(function(a,b){
					   return a[2] < b[2];
					});


					arrAge2.forEach(function(el){
					 console.log(el);
					});
					
				}
			});
			

		}
		else{
			alert('Не удалось авторизироваться')
		}
	}, 2);
}
foo()


	</script>

</body>
</html>

DivMan 03.12.2016 18:06

Вот пример на подобии, который тоже почему-то не работает

var arr = [
    ['firstname1', 'lasname1', '26'],
    ['firstname2', 'lastname2', '14'],
    ['firstname3', 'lasme3', '22'],
    ['firstname3', 'laname3', '22'],
    ['firstname4', 'lasame4', '23'],
    ['firstname2', 'lastname2', '14'],
    ['firstname5', 'lastnme5', '20']
];

console.log(arr.sort((a, b) => b[0] < a[0]))

рони 03.12.2016 18:31

Цитата:

Сообщение от DivMan
return a[2] < b[2];

Цитата:

Сообщение от DivMan
a, b) => b[0] < a[0]

откуда вы это взяли?

DivMan 03.12.2016 22:07

Исправил, всё равно не работает, и никто не может помочь

http://plnkr.co/edit/K8EdtgqrClE7PeZHLeCZ?p=preview

рони 03.12.2016 22:20

Цитата:

Сообщение от DivMan
Исправил,

что именно исравлено? может посмотреть документацию на sort

DivMan 03.12.2016 22:38

Первые массивы нормально сортируются, а те, которые сами подгружаются, то они не сортируются

http://plnkr.co/edit/K8EdtgqrClE7PeZHLeCZ?p=preview

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
<script src="http://vk.com/js/api/openapi.js"></script>

	<script>

	function foo() {

	VK.init({
			apiId: 5580872
		});


	VK.Auth.login(function(response){
	
		if(response.session){
		 
		 
	
			VK.api('friends.get', {'user_id' : '26291131', 'fields' : 'bdate'}, response => {
				if(response.error){
					alert(response.error.error_msg);
				}
				else{
					let userData = response.response;
					var arrUser = []
					var arrAge = [];
					var arrAge2 = [];
					var now = new Date(); 
					var god = now.getFullYear()
					
					
					
					
					for(var h = 0; h < userData.length; h++){
						arrUser.push(userData[h].first_name + ' ' + userData[h].last_name)
						
						if(typeof userData[h].bdate == 'string' && userData[h].bdate.split('.')[2]){
						arrAge.push(userData[h].first_name + ' ' + userData[h].last_name + ' ' + (god - parseInt((userData[h].first_name + ' ' + userData[h].last_name + ' ' + userData[h].bdate.split('.')[2]).split(' ')[2])))
							
						}
					}
					
					for(var c = 0; c < arrAge.length; c++){
						arrAge2.push(arrAge[c].split(' '))
						
					}
					
					
					//сортировка по возрасту
					
				
						arrAge2.sort(function(a, b){
						return a[2] < b[2]
					})
    
			
					
					for(var i = 0; i < arrAge2.length; i++){
						console.log(arrAge2[i])
					}
					
					
					
				}
			});
			

		}
		else{
			alert('Не удалось авторизироваться')
		}
	}, 2);
}
foo()



//точно такойже массив

var arr = [
  ['вапкр', 'птртвы',  '26'],
  ['иавовы', 'татьправпа', '14'],
  ['пролрлбпвы', 'Ячсми', '22'],
  ['енгщз', 'выапрпр','22'],
  ['еншщшз', 'олдщне', '23'],
  ['ппппппп', 'истттттт', '14'],
  ['уууууу', 'ллллллл',  '20']
];

	arr.sort(function(a, b){
						return a[2] < b[2]
					})
    
			
					
					for(var i = 0; i < arr.length; i++){
						console.log(arr[i])
					}
					
		console.log('-------------------------')	

	</script>

</body>
</html>

DivMan 03.12.2016 23:03

Короче я сделал по возрастанию, а потом сделал реверс

рони 03.12.2016 23:46

DivMan,
Цитата:

Сообщение от рони
может посмотреть документацию на sort



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