Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Удаление элементов из массива (https://javascript.ru/forum/dom-window/82946-udalenie-ehlementov-iz-massiva.html)

Fragman 10.08.2021 12:58

Удаление элементов из массива
 
Доброго времени суток, друзья. Интересует следующий момент. В js, я пытаюсь создать массив с числами, добавив в них id с чекбоксов. Массив при выделении чекбокса заполняется, но вот убрать это число из массива не выходит. Если выходит, то повторять действия нужно в том же порядке. В чём может быть дело? Заранее спасибо, за дельный совет :thanks:

doSomething = (props) => {
        let num = Number(props);

        for (let i = 0; i <= this.state.nums.length; i++) {
            if (num === this.state.nums[i]) {
                this.state.nums.splice(i, 1);
                break;
            } else {
                this.state.nums.push(num);
                break;
            }
        }
        this.setState({ newArr: this.state.nums });
        console.log(this.state.newArr);
    };

voraa 10.08.2021 13:33

Не совсем понятно, что вам именно надо.
Похоже надо добавить число в массив, если его там нет, или удалить, если оно там есть.
Тогда так

doSomething = (props) => {
        let num = Number(props);
        let k =  this.state.nums.indexOf(num);
        if (k<0) {
             this.state.nums.push(num)
        } else {
             this.state.nums.splice(k, 1);
        }
        this.setState({ newArr: this.state.nums });
        console.log(this.state.newArr);
    };

Fragman 10.08.2021 13:43

Спасибо огромное! Просто нет слов!!!

SuperZen 10.08.2021 14:06

я так понимаю, что это из реакта кусок, ну так есть плохая новость, что нельзя менять стейт не через setState ;)

voraa 10.08.2021 14:09

Ни капли не знаток реакта, но вроде там есть
this.setState({ newArr: this.state.nums });

SuperZen 10.08.2021 14:35

Цитата:

Сообщение от voraa
this.state.nums.push(num)

Цитата:

Сообщение от voraa
this.state.nums.splice(k, 1);

эти методы изменяют оригинальный массив, так не должно быть


Часовой пояс GMT +3, время: 14:04.