 
			
				07.07.2018, 11:58
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 06.08.2017 
					
					
					
						Сообщений: 473
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
			
			 
				Сортировка массива по значениям
			 
			
		
		
		
		Есть массив из чисел: 
let ostatki = [170,170,170,170,170,890,130,130,130,260];
 
Можно ли из него получить такой результат:
 
Остатки: 170 мм - 5 штук; 890 мм - 1 штук; 130 мм - 3 штук; 260 мм - 1 штук
 
И можно ли его потом отсортировать от меньшего к большему, чтобы вывести вот так: 
Остатки: 130 мм - 3 штук; 170 мм - 5 штук; 260 мм - 1 штук; 890 мм - 1 штук; 
 
Я пробую освоить и внедрять в свои скрипты методы filter, map и др. но у меня в практике пока самые простые применения. Поэтому я ещё туго соображаю как это работает. А вот как раз появилась задачка и хотелось бы увидеть как правильно делают решение.
 
Со склонением падежей слова  штук проблем нет, я знаю как это сделать и внедрить.  
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось MC-XOBAHCK, 07.07.2018 в 12:09.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				07.07.2018, 13:14
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 14.01.2015 
					
					
					
						Сообщений: 12,989
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Сначала сортируем, а затем выборка с припиской. 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				07.07.2018, 13:40
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 06.08.2017 
					
					
					
						Сообщений: 473
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Методы сортировки я нашёл в учебнике:  https://learn.javascript.ru/array-me...of-lastindexof
сижу пробую, изучаю. Что числа сортируются по первым цифрам - это я понял. Нужно писать свою функцию для arr.sort(compareNumeric); 
Я такого не делал, поэтому у меня пока нет идей с построением логики. Но думаю они появятся, ещё погуглю. 
А вот с группировкой значений - вообще темнота.  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				07.07.2018, 14:21
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 14.01.2015 
					
					
					
						Сообщений: 12,989
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от MC-XOBAHCK
			
		
	 | 
 
	| 
		Что числа сортируются по первым цифрам - это я понял.
	 | 
 
	
 
 Сортируется просто как числа - от  меньшего к большему. Если я правильно понял, то у вас есть массив  исходник, который нужно выводить с различными представлениями. Значит отсортировали, выбрали, хотя можно отсортировать и результат.  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				07.07.2018, 15:44
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 01.12.2016 
					
					
					
						Сообщений: 3,650
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
let ostatki = [170,170,170,170,170,890,130,130,130,260];
ostatki = ostatki.map(el=> el+'мм - '+ostatki.filter(x=> x==el).length +'штук').filter((e, i, s)=>s.indexOf(e) === i).sort((a,b)=> parseInt(a)- parseInt(b));
console.log(ostatki);
  
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось j0hnik, 07.07.2018 в 15:48.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				07.07.2018, 16:14
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.05.2010 
					
					
					
						Сообщений: 33,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		MC-XOBAHCK,
   
<script>
var ostatki = [170,170,170,170,170,890,130,130,130,260], out = {};
ostatki.forEach(function(a) {
  out[a] = (out[a]||0)+1
});
out = Object.keys(out).sort(function(a,b) {
   return a - b
}).map(function(a) {
   return a+'мм - ' + out[a] +' штук'
})
document.write(JSON.stringify(out, null, 4))
  </script>
 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				07.07.2018, 17:44
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 06.08.2017 
					
					
					
						Сообщений: 473
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	
		
			Сообщение от laimas
			 
		
	 | 
 
	| 
		Если я правильно понял, то у вас есть массив  исходник, который нужно выводить с различными представлениями.
	 | 
 
	
 
 У меня значения пушатся в этот массив из нескольких циклов. Он генерируется (если я правильно понял про массив исходник).
 
Процесс штрипсования тонколистового металла (если что). 
Более понятный пример по аналогии - листики A4 разрезать вдоль на визитки. Визитки 4-х вариантов: стандарт, супер-биг, мини и микро (в общем разных размеров). 
Режим листик А4 на супер-биг визитки - получается остаток из которого можно нарезать других видов визиток. 
Поэтому нужно обрезки собрать и пустить тут же в дело, чтобы сэкономить листиков А4. Как то так, только листики 2000 х 1250 мм.
 
j0hnik, рони СПАСИБО! 
Мне на вскидку понятнее вариант j0hnik. Разобью на части, посмотрю как поэтапно работают скрипты. Возможно промежуточные этапы мне понадобятся как отдельные значения.  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				07.07.2018, 19:11
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 25.10.2016 
					
					
					
						Сообщений: 1,013
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от MC-XOBAHCK
			
		
	 | 
 
	| 
		Мне на вскидку понятнее вариант j0hnik
	 | 
 
	
 
 А много ли пунктов в массиве? Если много, то рекомендую вариант  рони. Или то что изначально предложил  liamas - это может быть эффективнее, если повторов немного и значения в основном уникальны.  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				10.07.2018, 11:21
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 06.08.2017 
					
					
					
						Сообщений: 473
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	
		
			Сообщение от Alexandroppolus
			 
		
	 | 
 
	| 
		А много ли пунктов в массиве? Если много, то рекомендую вариант рони. Или то что изначально предложил liamas - это может быть эффективнее, если повторов немного и значения в основном уникальны.
	 | 
 
	
 
 Пунктов может быть по разному - генерируемое от задач (калькулятор). По идее не больше 100, обычно не более 2-ух десятков.
 
Если бы я умел так код как  рони и  liamas, я бы непременно воспользовался их вариантами. А так поднавалят решений где незнакомые мне методы, вроде ничего сложного, но я сразу в них теряюсь.
 
Хотя вот благодаря решениям выше, я смог освоить методы map, filter, reduce, sort. Пока правда только на цифровых массивах закрепил, но сейчас планирую c DOM этими методами поработать и немного переписать приложение. Идеи есть, пример мне  liamas ещё в том году написал.  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				10.07.2018, 13:19
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 01.12.2016 
					
					
					
						Сообщений: 3,650
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		MC-XOBAHCK, 
Если хотите хорошо понять данные методы, напишите их аналоги.
 
вот например мап
 
function map(arr, fn){
	var newArr = [];
	for (var i = 0; i<arr.length; i++){
		 newArr.push(fn(arr[i]));
	}
	return newArr;
}
// функция для проверки
function fn(el){
	return el * 2;
}
var arr = [1,2,3,4,5];
console.log(map(arr, fn));
reduce и sort будут посложнее.  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 |  
  |