Javascript 是什么导致我的代码不知道要从本地存储中删除哪个值?

Javascript 是什么导致我的代码不知道要从本地存储中删除哪个值?,javascript,local-storage,Javascript,Local Storage,我正在构建一个js web应用程序,允许用户添加到一个好习惯列表中,并根据自己的意愿删除它们。每天,应用程序都会随机选择一个供用户执行 我已经为应用程序构建了所有功能,但在实现本地存储时遇到了问题。当用户添加到习惯列表时,这些习惯将保存到本地存储。我遇到的问题是,当用户从列表中删除习惯时,相应的习惯不会从本地存储中删除。它似乎可以从本地存储中删除一些习惯,但不一定是用户单击的习惯 下面是一些代码: class Goodhabit { constructor(goodHabit) {

我正在构建一个js web应用程序,允许用户添加到一个好习惯列表中,并根据自己的意愿删除它们。每天,应用程序都会随机选择一个供用户执行

我已经为应用程序构建了所有功能,但在实现本地存储时遇到了问题。当用户添加到习惯列表时,这些习惯将保存到本地存储。我遇到的问题是,当用户从列表中删除习惯时,相应的习惯不会从本地存储中删除。它似乎可以从本地存储中删除一些习惯,但不一定是用户单击的习惯

下面是一些代码:

class Goodhabit {
    constructor(goodHabit) {
        this.goodHabit = goodHabit;
    }
}

class UI {
    addGoodHabit(goodhabit, callback) {
        const goodHabitList = document.getElementById('good-habit-list');

        // Create tr element
        const goodHabitRow = document.createElement('tr');

        // Insert html
        goodHabitRow.innerHTML = `
            <td class="good-habit">${goodhabit.goodHabit}</td>
            <td class="remove" id="remove">&#10005;</td>
        `;

        // Add row to list
        goodHabitList.appendChild(goodHabitRow);

        if(callback) {
            callback();
        }
    }

    removeGoodHabit(target, callback) {
        if(target.id === 'remove') {
            target.parentElement.remove();

            callback();
        }
    }
}

class Store {
    static getGoodHabits() {
        let goodhabitsls;
        if(localStorage.getItem('goodhabitsls') === null) {
            goodhabitsls = [];
        }   else {
            goodhabitsls = JSON.parse(localStorage.getItem('goodhabitsls'));
        }

        return goodhabitsls
    }

    static displayGoodHabits() {
        const goodhabitsls = Store.getGoodHabits()

        goodhabitsls.forEach(function(goodhabit) {
            // Instantiate ui
            const ui = new UI;

            // Add good habit to ui
            ui.addGoodHabit(goodhabit)
        })
    }

    static addGoodHabitToLs(goodhabit) {
        const goodhabitsls = Store.getGoodHabits()

        goodhabitsls.push(goodhabit);

        localStorage.setItem('goodhabitsls', JSON.stringify(goodhabitsls));
    }

    static removeGoodHabitFromLs(habit) {
        const goodhabitsls = Store.getGoodHabits()

        goodhabitsls.forEach(function(goodhabit, index) {

            if(goodhabit = habit) {
                goodhabitsls.splice(index, 1);
            }
        });

        localStorage.setItem('goodhabitsls', JSON.stringify(goodhabitsls));
    }
}

// Event Listener For Adding A Good Habit
document.getElementById('button-good-habit').addEventListener('click', function(e) {
    // Get form value
    const goodHabit = document.getElementById('good-habit-input').value;

    // Instantiate good habit
    const goodhabit = new Goodhabit(goodHabit);

    // Instantiate UI
    const ui = new UI();

    // Validate
    if(goodHabit === '') {
        // Code that displays warning
    }   else {
        // add good habit to list
        ui.addGoodHabit(goodhabit, goodHabitsNode);

        // add to ls
        Store.addGoodHabitToLs(goodhabit)

        // clear fields
        ui.clearFields();
    }
});

// Event Listener For Removing A Good Habit
document.getElementById('good-habit-list').addEventListener('click', function(e) {

    // Instantiate UI
    const ui = new UI();

    // Remove good habit from list
    ui.removeGoodHabit(e.target, goodHabitsNode);

    // Remove from ls
    Store.removeGoodHabitFromLs(e.target.previousElementSibling.textContent)
});
如果好习惯=习惯{ 使用两个等号==进行比较。现在,您在forEach中分配GoodHabity,而不是检查其值,因此每次迭代都会拼接出另一个元素

编辑:

正如在评论中所讨论的,比较也不起作用,因为goodhabitsls是一个对象数组,而不是字符串

解决方案是将对象的属性与参数进行比较,而不是将对象本身进行比较:

IfGoodBattage.GoodBattage==习惯{
感谢您的回复!最初我使用===然后==但是,当我执行此操作时,不会从本地存储中删除任何内容。@BoJack嗯,重新分配参数肯定不是解决此问题的方法。如果您的条件永远不为真,则传入的习惯一定不正确。您可以尝试在外部使用console.log或AlertHabity调试此问题循环。在forEach之后,如果我console.loggoodhabity,我会得到{goodhabity:aaa}如果我是console.loghabity,我只得到aaa。我想这可能与此有关,因为一个是对象,另一个只是文本?@BoJack再次检查,看起来你在localStorage中填充的列表是good Habity对象,而不是字符串。所以检查GoodHabity==Habity,其中Habity是字符串,GoodHabity是对象,就是d很可能会失败。也许你可以试试ifgoodhabit.goodHabit==习惯?我们有一个解决办法!谢谢你的帮助