@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
  • Вопрос задан
  • 496 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Всё так, всё работает. Между "не работает" и "работает не так, как я задумал" есть существенная разница, попытайтесь её осознать.

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

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

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

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