@test-cats

Как узнать элемент с которого начинаются цифры в массиве?

Подскажите как решить данную задачу
Дан массив числами, например: [10, 20, 30, 50, 235, 3000]. Выведите на экран только те числа из массива, которые начинаются на цифру 1, 2 или 5.
  • Вопрос задан
  • 8986 просмотров
Решения вопроса 3
@VSO-83
let arr = [10, 20, 30, 50, 235, 3000];

for (let i = 0; i < arr.length; i++) {
  let num = String(arr[i]);
  let char = num[0];
  if (char == 1 || char == 2 || char == 5) {
    console.log(num);
  }
}
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
let arr = [10, 20, 30, 50, 235, 3000];
console.log(arr.filter(num => ['1','2','5'].includes(num.toString()[0])));
Ответ написан
Комментировать
sergiks
@sergiks Куратор тега JavaScript
♬♬
Вот такая колбаса вернёт массив, где только «правильные» числа:
[10, 20, 30, 50, 235, 3000].filter(n => !!~[1,2,5].indexOf(+n.toString()[0]))
// результат  [ 10, 20, 50, 235 ]
Вывод на экран пилите самостоятельно.

Метод массива filter() оставит только те элементы, для которых функция внутри вернёт true. Функция аргумент (в скобках) применяется по очереди к каждому элементу массива (числу).
Переводит число в строку, забирает первй символ (первую цифру) и переводит опять в число (оператор +).
indexOf() ищет полученную первую цифру в массиве допустимых: 1, 2, 5 и возврашает его индекс (0, 1 или 2) или -1, если не найдено.
Битовое инвертирование ~ из -1 сделает 0. А из любого другого числа (из 0, 1 или 2) – сделает ненулевое число. Два !! это два булевых оператора отрицания. Из аргумента делают true или false. Из 0 получится false, из любого другого true. Таким образом связка !!~ и indexOf() даёт ответ на вопрос найден или не найден?
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
AnnTHony
@AnnTHony
Интроверт
function div(x, y) {
  return (x - x % y) / y;
}

function checked(number) {
  const template = [1, 2, 5];

  while (true) {
    if (div(number, 100) > 0) {
      number = div(number, 10);
    } else {
      return template.includes(div(number, 10));
    }
  }
}

let data = [10, 20, 30, 50, 235, 3000];
data.forEach(item => {
  if (checked(item)) {
    console.log(item);
  }
});
Ответ написан
@tg_Laudmoor
Если вы хотите использовать циклы:

const arr = [10, 20, 30, 50, 235, 3000];
let elemets;
for (let elem of arr){
 if(elem.toString().[0] === '1' || elem.toString().[0] === '2' || elem.toString().[0] === '5'){
   console.log(elem)
 }
}
Ответ написан
Комментировать
@DanBordian
for( i = 0; i < arr.length; i++ ) {
if( arr [i][0] == '1' || arr [i][0] == '2' || arr [i][0] == '5' ) {
console.log( +arr[i] );
}
}
arr[i][0] - проверяем первую цифру числа. Вернет строку, по этому в console ставим +arr[i], возвращяем в цифру
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы