Задать вопрос
@ognivushka

Почему filter() возвращает пустой массив?

Не понимаю, почему filter возвращает пустой массив:

const arr = [...Array(hMax).keys()].map((x) => ++x);
  const newArr = arr
    .map((el, i) =>
      el
        .toString()
        .split("")
        .map((el) => Math.pow(el, exp))
        .reduce((acc, el, i) => (acc += el))
    )
    .filter(function (el, i) {
      return arr[i] === el[i];
    });
  • Вопрос задан
  • 188 просмотров
Подписаться 1 Простой 5 комментариев
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
.filter(function (el, i) {
  return arr[i] === el[i];
})

Элементы массива - числа. Как думаете, бывает ли у чисел свойство 0? Или 5? А зачем тогда [i]? Может, должно было быть arr[i] === el?

UPD. Я так понял, стоит задача найти натуральные числа, которые равны сумме собственных цифр, возведённых в степень.

Фильтрация не нужна:

const arr = Array.from({ length: hMax }, (_, i) => i + 1);
const result = arr.reduce((acc, number) => (
  Array.prototype.reduce.call(
    `${number}`,
    (diff, digit) => diff - digit ** exp,
    number
  ) || acc.push(number),
  acc
), []);

Вообще, никакие методы массивов не нужны:

const result = [];
for (let i = 1; i <= hMax; i++) {
  let sum = 0;
  for (let j = i; j; j = Math.floor(j / 10)) {
    sum += (j % 10) ** exp;
  }
  if (i === sum) {
    result[result.length] = i;
  }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы