Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.09.2020, 16:36
Аспирант
Отправить личное сообщение для Alena_03 Посмотреть профиль Найти все сообщения от Alena_03
 
Регистрация: 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>');
}
}
Не пойму, что не нравится, помогите. Или есть какой-нибудь другой способ?
Ответить с цитированием
  #2 (permalink)  
Старый 13.09.2020, 16:47
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,795

var numbers = [10, 20, 30, 50, 235, 3000];
var result = numbers.filter(num => [1, 2, 5].includes(+String(num).charAt(0)));

alert(result.join('; '));
Ответить с цитированием
  #3 (permalink)  
Старый 13.09.2020, 16:53
Аспирант
Отправить личное сообщение для Alena_03 Посмотреть профиль Найти все сообщения от Alena_03
 
Регистрация: 06.09.2020
Сообщений: 57

Nexus, спасибо ещё раз огромное)
Ответить с цитированием
  #4 (permalink)  
Старый 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]); // выводим тот элемент который верен по условию
}
}
Ответить с цитированием
  #5 (permalink)  
Старый 17.05.2021, 08:47
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Семён Дементьев, нет особого смысла в выкладывании варианта хуже предыдущего...

Например такой пример
var numbers = [10, 20, 30, 50, 235, 3000];
var result = numbers.filter(num => /^[125]/.test(num));

alert(result.join('; '));


Хотя бы короче предыдущего...
Ответить с цитированием
  #6 (permalink)  
Старый 17.05.2021, 09:43
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,750

Сообщение от 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.
Ответить с цитированием
  #7 (permalink)  
Старый 17.05.2021, 10:33
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

Сообщение от voraa
Второй вариант самый быстрый,
для "классики" не хватает длину массива закешировать.
Ответить с цитированием
  #8 (permalink)  
Старый 17.05.2021, 11:19
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,750

Ну как бы разработчики V8 часто очень гордятся, что путем различных ухищрений им удается поднять производительность на 5-10%
А тут порядка 20-25% и совершенно бесплатно.
Ответить с цитированием
  #9 (permalink)  
Старый 17.05.2021, 11:45
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от voraa
Второй вариант самый быстрый, а третий - самый медленный
Второй вариант создает дополнительный массив (это я про "оригинал")...
Ответить с цитированием
  #10 (permalink)  
Старый 17.05.2021, 12:01
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,750

Сообщение от ksa
Второй вариант создает дополнительный массив
Какой?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Преобразование многомерного массива в строку и обратно Bond Общие вопросы Javascript 5 08.04.2015 13:16
преобразование массива с объектами в строку и обратно JustCrazy Элементы интерфейса 5 25.01.2015 18:15
Преобразование объекта в URL строку Hapson Общие вопросы Javascript 5 23.03.2014 11:44
Преобразование значения переменной в строку leny Общие вопросы Javascript 3 01.10.2011 22:34
Преобразование дробного числа в строку с пробелами между разрядами Mutagena Общие вопросы Javascript 3 28.03.2011 11:05