Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在设置本地存储中的重复元素时修复它们?_Javascript_Jquery - Fatal编程技术网

Javascript 如何在设置本地存储中的重复元素时修复它们?

Javascript 如何在设置本地存储中的重复元素时修复它们?,javascript,jquery,Javascript,Jquery,我想将带有信息的元素从HTML标记设置到localStorage。其思想是:元素已经存在于localStorage?中,如果它确实存在,则推送新元素,并在localStorage中再次设置它,但如果它不存在,则创建对象,将元素保留在其上,并在localStorage中设置它 我已经有了评估,一切都很顺利,直到用户第二次单击HTML元素,因为它开始复制localStorage中的元素。 我将向您展示我的一些代码: $j('a.a-links').click(function (e) { e

我想将带有信息的元素从HTML标记设置到localStorage。其思想是:元素已经存在于localStorage?中,如果它确实存在,则推送新元素,并在localStorage中再次设置它,但如果它不存在,则创建对象,将元素保留在其上,并在localStorage中设置它

我已经有了评估,一切都很顺利,直到用户第二次单击HTML元素,因为它开始复制localStorage中的元素。 我将向您展示我的一些代码:

$j('a.a-links').click(function (e) {
    e.preventDefault();
    if (!localStorage.getItem('Navegacion-Prueba')) {
        localStorage.setItem('Navegacion-Prueba', JSON.stringify([]));
        console.log('creates object in local storage');
    }
    var objectFromLS = JSON.parse(localStorage.getItem('Navegacion-Prueba')),
        focus = e.target,
        categoryL1 = $j(focus).parents('li.submenu-li-first').find('.submenu-li-link').html(),
        categoryL2 = $j(focus).parents('.subsubcater-ul-full').find('a').html(),
        // console.log(categoryL2);
        categoryL3 = $j(focus).html(),
        // console.log(categoryL3);
        cont = 1,
        navObjRed = {
            "CatN1": categoryL1,
            "CatN2": categoryL2,
            "CatN3": categoryL3,
            "Cont": cont
        };
        console.log(objectFromLS);
    if (objectFromLS.length === 0) {
        objectFromLS.push(navObjRed);
        // localStorage.setItem("Navegacion-Prueba", JSON.stringify(objectFromLS));
        console.log(objectFromLS);
        // return objectFromLS;
    } else {
        $j(objectFromLS).each(function (o) {
            if (o.CatN3 === categoryL3) {
                o.CatN3 += 1;
                // localStorage.setItem("Navegacion-Prueba", JSON.stringify(objectFromLS));
                console.log('object already exists, adding 1 to counter');
                // return objectFromLS;

            } else {
                objectFromLS.push(navObjRed);
                console.log('object already exists, adding a new object');
                // return objectFromLS;

            }
        })
    }
    localStorage.setItem("Navegacion-Prueba", JSON.stringify(objectFromLS));
    console.log('setting the object in local storage');
});
我期望发生的是,每次用户单击“a”标记时,localStorage中的信息都会更新,无论它是否已经设置,更新是否包括向计数器添加1,或者只是单击的元素没有存储,需要将其添加到现有对象中,或者是否必须从头创建它。这种情况已经发生,但每次用户单击元素时都会重复

情况就是这样: 导航红色:[{CatN1:“Electroónica”,CatN2:“Videojuegos”,CatN3:“任天堂交换机”,续:1},]

0:{CatN1:“Electroónica”,CatN2:“Videojuegos”,CatN3:“任天堂交换机”,续:1}

1:{第1类:“厄尔尼诺”,第2类:“厄尔尼诺”,第3类:“海洋保护组织”,续:1}

2:{第1类:“霍加尔”,第2类:“梅布勒斯”,第3类:“梅萨斯”,续:1}

3:{第1类:“霍加尔”,第2类:“梅布勒斯”,第3类:“梅萨斯”,续:1}

4:{第1类:“美食”,第2类:“目的地”和“利科雷斯”,第3类:“梅斯卡尔”,续:1}

5:{第1类:“美食”,第2类:“目的地”和“利科雷斯”,第3类:“梅斯卡尔”,续:1}

6:{第1类:“美食”,第2类:“目的地”和“利科雷斯”,第3类:“梅斯卡尔”,续:1}

7:{第1类:“美食”,第2类:“目的地”和“利科雷斯”,第3类:“梅斯卡尔”,续:1}

8:{CatN1:“穆杰尔”,CatN2:“Ropa”,CatN3:“查马拉斯和查莱科斯”,续:1}

9:{CatN1:“穆杰尔”,CatN2:“Ropa”,CatN3:“查马拉斯和查莱科斯”,续:1}

10:{CatN1:“穆杰尔”,CatN2:“Ropa”,CatN3:“查马拉斯和查莱科斯”,续:1}

11:{CatN1:“穆杰尔”,CatN2:“Ropa”,CatN3:“查马拉斯和查莱科斯”,续:1}

12:{CatN1:“穆杰尔”,CatN2:“Ropa”,CatN3:“查马拉斯和查莱科斯”,续:1}

13:{CatN1:“穆杰尔”,CatN2:“Ropa”,CatN3:“查马拉斯和查莱科斯”,续:1}

14:{CatN1:“穆杰尔”,CatN2:“Ropa”,CatN3:“查马拉斯和查莱科斯”,续:1}

15:{CatN1:“穆杰尔”,CatN2:“Ropa”,CatN3:“查马拉斯和查莱科斯”,续:1}


等等。。。用户点击次数相同。

我已经找到了问题的解决方案,我将向您展示,我希望这对其他人有所帮助:

$j('a.a-links').click(function (e) {
    e.preventDefault();
    if (!localStorage.getItem('Navegacion-Prueba')) {
        localStorage.setItem('Navegacion-Prueba', JSON.stringify([]));
    }
    var objectFromLS = JSON.parse(localStorage.getItem('Navegacion-Prueba')),
        focus = e.target,
        categoryL1 = $j(focus).parents('li.submenu-li-first').find('.submenu-li-link').html(),
        categoryL2 = $j(focus).parents('.subsubcater-ul-full').find('a').html(),
        categoryL3 = $j(focus).html(),
        cont = 1,
        navObjRed = {
            "CatN1": categoryL1,
            "CatN2": categoryL2,
            "CatN3": categoryL3,
            "Cont": cont
        };
    if (Object.keys(objectFromLS).length === 0) {
        objectFromLS.push(navObjRed);
    } else if (Object.keys(objectFromLS).length !== 0) {
        var validator = false;
        localStorage.setItem('Navegacion-Prueba', JSON.stringify([]));
        $j(objectFromLS).each(function () {
            if (this.CatN3 === categoryL3) {
                this.Cont += 1;
                 validator = false;
            } else {
                validator = true;
            }
        })
        if (validator === true) {
            objectFromLS.push(navObjRed);
        } else {
            console.log('no adding new element');
        }
    }
    localStorage.setItem("Navegacion-Prueba", JSON.stringify(objectFromLS));
});
正如您所看到的,问题在于我将新元素推送到循环中,因此它推送到的次数与localStorage中对象中的元素数相同。所以我只是把它推到圈外


感谢所有回答我的人

if(!localStorage.getItem('Navegacion-Prueba'){localStorage.setItem('Navegacion-Prueba');}
我刚刚更改了那个部分,现在我评估元素是否在LS中,最后我在LS中设置了对象,但它一直在复制元素。你有什么其他建议吗?据我所知,只要
o.CatN3===categoryL3
为false,你总是会添加新项。试着找出原因。你能提供什么您所期望的。您只检查CatN3,而不检查其他CatN3。