@aleshaykovlev
html, css, js, node, webpack, sass, react

Не работает метод filter, что не так?

Есть массив с елементами:
const figures: Array<Object> = [
    {name: 'horse', startDot: {vert: 8, horz: 57}, side: true, shot: {vert: 2, horz: 1}}
]


Функция, с помощью которой я проверяю:
function renderFigures(figures: Array<Object>): void {
    const $boardDot: NodeListOf<HTMLElement> = document.querySelectorAll('.board__dot');

    const boardDotElements: Array<HTMLElement> = [...$boardDot];

    const figuresPosition = boardDotElements.filter((item: HTMLElement): void => {
        figures.map((figure: Object): void => {
            item.dataset.position === figure.startDot.horz;
        })
    });

    console.log(figuresPosition);
};

renderFigures(figures);


Выводится пустой массив, хотя есть один html елемент с таким же position как и у figure.startDot.horz
  • Вопрос задан
  • 148 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Всё так, всё работает. Между "не работает" и "работает не так, как ожидается" есть существенная разница, попытайтесь её осознать.

Во-первых, чтобы результирующий массив был непустым, надо, как минимум, из коллбека фильтрации что-то возвращать. При использовании map'а - тоже. Кстати, а зачем map? Непонятно. Возможно, вместо него нужен some.

Во-вторых - в dataset лежат строки, сравниваете их вы с числами. Без приведения типов. Очевидно, что результаты подобных проверок всегда будут ложными.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Artezio Нижний Новгород
от 130 000 до 180 000 ₽
Artezio Москва
от 160 000 до 220 000 ₽
Intspirit Краснодар
от 80 000 до 150 000 ₽