 
			
				13.09.2020, 16:36
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Аспирант 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 06.09.2020 
					
					
					
						Сообщений: 57
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
			
			 
				Преобразование числа в строку
			 
			
		
		
		
		Всем привет, задание: Дан массив числами, например: [10, 20, 30, 50, 235, 3000]. Выведите на экран только те числа из 
массива, которые начинаются на цифру 1, 2 или 5. Нужно сделать через преобразование числа в строку, но выводит что-то непонятное. Мой код:  
var arr = [10, 20, 30, 50, 235, 3000];
arr = String (arr);
for (var i = 0; i < arr.length; i++) {
if (arr[i][0] == 1 || arr[i][0] == 2 || arr[i][0] == 5) {
document.write(arr[i] + '<br>');
}
}
 Не пойму, что не нравится, помогите. Или есть какой-нибудь другой способ?    
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				13.09.2020, 16:47
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 04.12.2012 
					
					
					
						Сообщений: 3,841
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
var numbers = [10, 20, 30, 50, 235, 3000];
var result = numbers.filter(num => [1, 2, 5].includes(+String(num).charAt(0)));
alert(result.join('; '));
 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				13.09.2020, 16:53
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Аспирант 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 06.09.2020 
					
					
					
						Сообщений: 57
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Nexus, спасибо ещё раз огромное) 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				16.05.2021, 22:59
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Новичок на форуме 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 16.05.2021 
					
					
					
						Сообщений: 1
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 a = [10, 20, 30, 50, 235, 3000]; 
 
for(i=0; i<a.length; i++){ 
    b = String(a[i]); // приобразовали в строку КАЖДЫЙ элемент 
     
    if(b[0]==1 || b[0]==2 || b[0]==5) // спрашиваем, ПЕРВЫЙ символ элемента = 1 или 2 или 5? 
    {  
        console.log(a[i]); // выводим тот элемент который верен по условию 
    } 
} 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				17.05.2021, 08:47
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 CacheVar 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 19.08.2010 
					
					
					
						Сообщений: 14,298
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Семён Дементьев, нет особого смысла в выкладывании варианта хуже предыдущего...    
Например такой пример
 
var numbers = [10, 20, 30, 50, 235, 3000];
var result = numbers.filter(num => /^[125]/.test(num));
alert(result.join('; '));
Хотя бы короче предыдущего...    
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				17.05.2021, 09:43
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 03.02.2020 
					
					
					
						Сообщений: 2,777
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от ksa
			
		
	 | 
 
	| 
		нет особого смысла в выкладывании варианта хуже предыдущего...
	 | 
 
	
 
 Хуже или лучше - понятие относительное
 
<script>
let t0, t1, t2, t3;
const ar = Array.from({length:1_000_000}, (_, i)=>i)
let b;
t0 = performance.now();
b = ar.filter(num => [1, 2, 5].includes(+String(num).charAt(0)));
t1 = performance.now() - t0;
t0 = performance.now();
b=[];
for(let i=0; i<ar.length; i++){
	const as = String(ar[i])[0]; 
	if(as === '1' || as === '2' || as === '5') b.push(ar[i])
}
t2 = performance.now() - t0;
t0 = performance.now();
b = ar.filter(num => /^[125]/.test(num));
t3 = performance.now() - t0;
alert (`t1=${t1} t2=${t2} t3=${t3}`)
</script>
Второй вариант самый быстрый, а третий - самый медленный 
(ну у меня в Chrome так)  
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось voraa, 17.05.2021 в 09:57.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				17.05.2021, 10:33
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.05.2010 
					
					
					
						Сообщений: 33,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от voraa
			
		
	 | 
 
	| 
		Второй вариант самый быстрый,
	 | 
 
	
 
    для "классики" не хватает длину массива закешировать.  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				17.05.2021, 11:19
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 03.02.2020 
					
					
					
						Сообщений: 2,777
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Ну как бы разработчики V8 часто очень гордятся, что путем различных ухищрений им удается поднять производительность на 5-10% 
А тут порядка 20-25% и совершенно бесплатно. 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				17.05.2021, 11:45
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 CacheVar 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 19.08.2010 
					
					
					
						Сообщений: 14,298
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от voraa
			
		
	 | 
 
	| 
		Второй вариант самый быстрый, а третий - самый медленный
	 | 
 
	
 
 Второй вариант создает дополнительный массив (это я про "оригинал")...    
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				17.05.2021, 12:01
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 03.02.2020 
					
					
					
						Сообщений: 2,777
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от ksa
			
		
	 | 
 
	| 
		Второй вариант создает дополнительный массив
	 | 
 
	
 
 Какой?  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 |  
  |