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按钮控制台数组刷新了一下但并没有更新数据。
请问这个问题该怎么解决
不用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) {
这样就可以了,这个就只要值相等就可以了,不包括类型
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!