For循环错误,需要帮助解决

for loop bug, help needed to resolve

本文关键字:帮助 解决 循环 错误 For      更新时间:2023-09-26

我有这个。click函数,在那里我将检索cookie信息(其中包含3个索引与多个元素)

例子供你参考我的意思

array= {name:"sam"姓:"tan"} {name:"jam"姓:"man"} {姓名:"gam"姓:"wan"}

所以我通过解析它到一个变量来调用它然后我创建了另一个新变量,并做一个if, else函数来过滤元素到新的数组中,因为我的。click函数是检查人们修改他们的名字/姓氏,然后按下更新按钮,这就是为什么我在听。click,我的代码很多,所以我只拿它的一部分用于参考目的

$('#update').click(function(){
                        clickedProfile.surname = $("input[name=contact-surname]").val();
                        clickedProfile.name = $("input[name=contact-name]").val();
                        clickedProfile.gender = $("input[name=contact-gender]").val();
                        $("#contact-surname").text('Surname is ' + $("input[name=contact-surname]").val());
                        $("#contact-name").text('Name is ' + $("input[name=contact-name]").val());
                        $("#contact-gender").text('Gender is ' + $("input[name=contact-gender]").val());
                        var c = JSON.parse($.cookie('cookiecontact'));
                        var d = [];
                        for(var i = 0; i < c.length; i++)
                        {
                            if(globalID == i)
                            {
                                d.push(clickedProfile); // in array, for that element it will store in the updated value
                            }
                            else
                            {
                                d.push(c[i]); // push in remaining non affected indexes into array
                            }
                        }
                        d.sort(function(a, b){
                            return a.name.localeCompare(b.name)
                        });
                        $.cookie('cookiecontact', JSON.stringify(d));
                        console.log($.cookie('cookiecontact'));
                    });

我将为我的目的解释代码

clickedProfile.surname = $("input[name=contact-surname]").val();
clickedProfile.name = $("input[name=contact-name]").val();
clickedProfile.gender = $("input[name=contact-gender]").val();

我在另一个函数上声明了clickProfile,它将附加LI列表的唯一ID,因此,如果我的单击是在第一个LI上,clickProfile将附加LI ID = 0,它链接到数组[0]元素。

对于for循环,如果LI被点击if语句将运行将更新后的代码推送到联系人数组

的索引元素上

如果它与我所单击的globalID不匹配,它将继续将其余的索引元素推入var D。

当我刷新页面获取更新后的列表时,

example:起始是我的主li表单只显示联系人数组

中每个索引的名称值山姆

  • 果酱
  • gam
  • 我第一次尝试将Sam更改为zam时,它运行良好输出

    果酱

  • gam
  • 祖阿曼
  • 第二次我尝试将zam更改为CAM时,它将开始表现奇怪的输出

  • 凸轮
  • 凸轮
  • 果酱
  • 并且在第三次尝试更改jam以禁止之后,它将变成禁止

  • 禁止
  • 禁止
  • 我不知道是什么原因导致这个,因为它似乎改变了一个额外的索引后,每次我按下更新。

    到目前为止,我对函数的逻辑是
    1. 从cookie中检索值(cookie有3个预设元素字符串)
    2. 过滤器放入一个新的变量,如果全局id ==匹配,则放更新信息在该元素中,同时推入其余加载的元素元素
    3. 按字母顺序排序
    4. 存储到cookie
    5. 转到另一个页面并返回检查更新的列表

    我认为我的逻辑是好的到目前为止,但不确定我做错了。请指出我的错误,谢谢!

    这个数组排序算法可能是罪魁祸首。

    d.sort(function(a, b){
        return a.name.localeCompare(b.name)
    });
    

    当您按名称排序数组时,您的数组索引不再与您的globalID匹配。然后,下次点击时,cookie数组中的错误项将被替换。

    这是一个工作版本在http://jsfiddle.net/F8RvB/:

    var clickedProfile = {};
    var globalID = 0;
    var cookieContact = [{ name:"one" ,surname:"oner", gender:"male", id:0 }, { name:"two", surname:"twoer", gender: "male", id:1 }, { name:"three", surname:"threer" , gender: "male", id:2}];
    $('#update').click(function(){
    clickedProfile.surname = $("input[name=contact-surname]").val();
    clickedProfile.name = $("input[name=contact-name]").val();
    clickedProfile.gender = $("input[name=contact-gender]").val();
    clickedProfile.id = globalID;
    $("#contact-surname").text('Surname is ' + $("input[name=contact-surname]").val());
    $("#contact-name").text('Name is ' + $("input[name=contact-name]").val());
    $("#contact-gender").text('Gender is ' + $("input[name=contact-gender]").val());
    var c = cookieContact;
    var d = [];
    for(var i = 0; i < c.length; i++)
    {
        if(globalID == i)
        {
            d.push(clickedProfile); // in array, for that element it will store in the updated value
        }
        else
        {
            d.push(c[i]); // push in remaining non affected indexes into array
        }
    }
    d.sort(function(a, b){
        return a.id > b.id;
    });
    cookieContact = d;
    console.log(cookieContact);
    });
    

    为了简单起见,我删除了cookie函数,并将其替换为硬编码的pojo数组。不确定为什么要对数组进行排序…在这里的工作示例中,您可以完全删除排序。否则,当您从cookie中获取数据以供以后使用时,您应该考虑排序,或者根据排序后的数组索引更新您的globalID。