如何更新本地存储中数组的特定值?

How to update a specific value from the array in local storage?

本地存储中有一个字符串数组。我想从该数组中找到一个特定值,并只更新该特定值而不更改数组的其余部分。

function saveLocalChecked(task) {
    let tasks = JSON.parse(localStorage.getItem('tasks'));
    const taskIndex = task.children[1].innerText;

    for(let i = 0; i < tasks.length; i++) {
        if(tasks[i] === taskIndex) {
            localStorage.setItem('tasks', JSON.stringify(tasks[i] + '*'));
        }
    }
}

因此,在此函数中,我通过从本地存储中提取项目来创建 tasks 数组。在 for 循环中,我遍历 tasks 数组以查找特定元素。现在,我想通过连接星号来更新该元素。但是在检查我的本地存储后,只有那个更新的元素,数组的其余部分就消失了。

如何解决这个问题?

那是因为您要用应用更改的单个元素替换该特定数组的整个存储。在您的 if 条件下更改您想要的项目,并将带有更新元素的整个数组发送回存储

function saveLocalChecked(task) {
    let tasks = JSON.parse(localStorage.getItem('tasks'));
    const taskIndex = task.children[1].innerText;

    for(let i = 0; i < tasks.length; i++) {
        if(tasks[i] === taskIndex) {
            tasks[i] = tasks[i] + '*'
            localStorage.setItem('tasks', JSON.stringify(tasks));
        }
    }
}

您随时可以从本地存储中检索数据,修改数据并再次存储。在您的情况下,您可以直接修改数组 tasks,然后再将修改后的数组再次存储在本地存储中。

function saveLocalChecked(task) {
    let tasks = JSON.parse(localStorage.getItem('tasks'));
    const taskIndex = task.children[1].innerText;

    //Modify elements
    for(let i = 0; i < tasks.length; i++) {
        if(tasks[i] === taskIndex) {
            tasks[i]+='*';
        }
    }
   
    //Store modified array in localstorage
    localStorage.setItem('tasks', JSON.stringify(tasks));
}