js用splice更新数组失败。

js用splice更新数组失败。
数组:

var list = [{ "Id": '0', "FirstName": "Stark", "LastName": "Bill", "DateOfBirth": "2000/10/11", "Gender": "Male", "PrimaryInsurance": "Medicare", "Address": "ddadsdasd", "ContactNumber": "1338872818738", "NextOfKin": "weqe" },
    { "Id": '1', "FirstName": "Shown", "LastName": "Jenny", "DateOfBirth": "2000/10/11", "Gender": "Male", "PrimaryInsurance": "Medicare", "Address": "ddadsdasd", "ContactNumber": "1338872818738", "NextOfKin": "weqe" },
    { "Id": '2', "FirstName": "Geogrge", "LastName": "Hash", "DateOfBirth": "2000/10/11", "Gender": "Male", "PrimaryInsurance": "Medicare", "Address": "ddadsdasd", "ContactNumber": "1338872818738", "NextOfKin": "weqe" },
    { "Id": '3', "FirstName": "Intwre", "LastName": "zaiwoo", "DateOfBirth": "2000/10/11", "Gender": "Male", "PrimaryInsurance": "Medicare", "Address": "ddadsdasd", "ContactNumber": "1338872818738", "NextOfKin": "weqe" },
    { "Id": '4', "FirstName": "Niko", "LastName": "baby", "DateOfBirth": "2000/10/11", "Gender": "Male", "PrimaryInsurance": "Medicare", "Address": "ddadsdasd", "ContactNumber": "1338872818738", "NextOfKin": "weqe" }];

html:

Insert a patient
Patient ID*:type="text" id="insertId" value="">
First name*:type="text" id="FirstName" value="">
Last name*:type="text" id="LastName" value="">
Date of birth *:type="text" id="DateOfBirth" value="">
Gender*:type="text" id="Gender" value="">
Primary insurance*:type="text" id="PrimaryInsurance" value="">
Address *:type="text" id="Address" value="">
Contact number *:type="text" id="ContactNumber" value="">
Next of kin:type="text" id="NextOfKin" value="">
type="button" value="Insert a Patient" onclick="insertPatient();">

js:

function insertById(list, insertId) {
     var insertId=document.getElementById("insertId");
     var FirstName=document.getElementById("FirstName");
     var LastName=document.getElementById("LastName");
     var DateOfBirth=document.getElementById("DateOfBirth");
     var Gender=document.getElementById("Gender");
     var PrimaryInsurance=document.getElementById("PrimaryInsurance");
     var Address=document.getElementById("Address");
     var ContactNumber=document.getElementById("ContactNumber");
     var NextOfKin=document.getElementById("NextOfKin");
    for (var i = 0; i < list.length; i++) {
        if (list[i].Id === deleteId) {
            list.splice(i, 1,{Id: insertId.value,
                FirstName: FirstName.value,
                LastName: LastName.value,
                DateOfBirth: DateOfBirth.value,
                Gender: Gender.value,
                PrimaryInsurance: PrimaryInsurance.value,
                Address: Address.value,
                ContactNumber: ContactNumber.value,
            NextOfKin: NextOfKin.value});
        }
    }
    return list;
}
function insertPatient(){
     var insertId=document.getElementById("insertId");
     var res = insertById(list,insertId.value)
     console.log(res)
     refreshList();
    
}

错误:
点击insert按钮控制台数组刷新了一下但并没有更新数据。

img

请问这个问题该怎么解决

不用splice,直接更新对应id记录数组项就行,并且代码缺少deleteId这个变量,改下面即可。


        function insertById(list, insertId) {
            var insertId = document.getElementById("insertId");
            var deleteId = insertId.value;//定义变量
            var FirstName = document.getElementById("FirstName");
            var LastName = document.getElementById("LastName");
            var DateOfBirth = document.getElementById("DateOfBirth");
            var Gender = document.getElementById("Gender");
            var PrimaryInsurance = document.getElementById("PrimaryInsurance");
            var Address = document.getElementById("Address");
            var ContactNumber = document.getElementById("ContactNumber");
            var NextOfKin = document.getElementById("NextOfKin");
            for (var i = 0; i < list.length; i++) {
                console.log(list[i].Id === insertId, deleteId)
                if (list[i].Id === deleteId) {///直接更新数组项
                    list[i] = {
                        Id: insertId.value,
                        FirstName: FirstName.value,
                        LastName: LastName.value,
                        DateOfBirth: DateOfBirth.value,
                        Gender: Gender.value,
                        PrimaryInsurance: PrimaryInsurance.value,
                        Address: Address.value,
                        ContactNumber: ContactNumber.value,
                        NextOfKin: NextOfKin.value
                    };
                    break;//不需要继续循环
                }
            }
            return list;
        }

你的代码没问题的
是你

 if (list[i].Id === deleteId) {

这个判断有问题,因为list[i].Id这个的值是字符串类型,而你传递进来的是deleteId整型,你使用===是肯定不对的,因为===这个是表示值和类型都要相等才行,你要换成:

 if (list[i].Id ==deleteId) {

这样就可以了,这个就只要值相等就可以了,不包括类型

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632