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

174
24 декабря 2018, 18:20

У меня есть массив элементов с названием игр. Он отображается на странице у каждой игры есть кнопка добавление в закладки. При нажатие на кнопку игра добавляется в закладку и закладка светится черным при повторном удаляется из закладки.

 <button type="button" className="btn btn-dark"  onClick={e => this.updateMarker("newItem", item)}>
<FaStar />
    </button>
 updateMarker(key, value) {
    this.state.newItem = value
    // update react state
    this.setState({ [key]: value });
    // update localStorage
    localStorage.setItem(key, value);

   if(this.state.list.length === 0){
        this.addMarker()
    }else{
        this.state.list.forEach((item) => {
            if(value === item.value){
                console.log('повтор  удалять', item.value,  value)
                this.deleteMarker(value)
            }else {
                console.log('запись', item.value, '===', value)
                this.addMarker()
            }
        })
    }
}
addMarker = () => {
    // create a new item
    const newItem = {
        id: 1 + Math.random(),
        value: this.state.newItem.slice()
    };
    // copy current list of items
    const list = [...this.state.list];
    // add the new item to the list
    list.push(newItem);
    // update state with new list, reset the new item input
    this.setState({
        list,
        newItem: ""
    });
    // update localStorage
    localStorage.setItem("list", JSON.stringify(list));
    localStorage.setItem("newItem", "");
    console.log('add',localStorage)
}

deleteMarker(value) {
    // copy current list of items
    const list = [...this.state.list];
    // filter out the item being deleted
    const updatedList = list.filter(item => item.value !== value);
    this.setState({ list: updatedList });
    // update localStorage
    localStorage.setItem("list", JSON.stringify(updatedList));
    console.log('delete',localStorage)
}

Использовал функцию .forEach c условием есть есть такая игра в массиве, то удали иначе добавь. Но проблема в этом способе что он проверяет все элементы то есть 100 игр и он 99 раз вызовет запись и 1 раз вызовет удаление. Есть ли какой то другой метод перебора, или как вызвать функцию когда есть хотя бы один true на удаление, если нет то вызвать запись ?

READ ALSO
Прерывистая рамка

Прерывистая рамка

Как сделать такую прерывистую рамку?

170
Как делать сброс select по событию на чистом js?

Как делать сброс select по событию на чистом js?

Имеются textarea и selectМне нужно по событию paste в textarea сбрасывать select

168