Javascript 项未从数组中删除

Javascript 项未从数组中删除,javascript,jquery,arrays,Javascript,Jquery,Arrays,我正在尝试删除项目,但无法理解为什么项目没有从数组中删除删除其在删除项目函数的最后一行中,但项目没有从数据数组中删除我拼接了数组,但这对我也不起作用,如果有更好的解决方案,请帮助我 它在deleteitem函数中 //学生表单的构造函数 var studentForm=函数(iD、姓名、城市、学院、课程、年龄){ this.id=id; this.name=名称; this.city=城市; 这个学院=学院; 本课程=课程; 这个。年龄=年龄; } //所有数据都作为对象存储在这里 var数据

我正在尝试删除项目,但无法理解为什么项目没有从数组中删除删除其在删除项目函数的最后一行中,但项目没有从数据数组中删除我拼接了数组,但这对我也不起作用,如果有更好的解决方案,请帮助我

它在deleteitem函数中

//学生表单的构造函数
var studentForm=函数(iD、姓名、城市、学院、课程、年龄){
this.id=id;
this.name=名称;
this.city=城市;
这个学院=学院;
本课程=课程;
这个。年龄=年龄;
}
//所有数据都作为对象存储在这里
var数据=[];
//提交和显示表单的函数
var submitForm=function(){
//从字段获取输入数据
var getInput={
名称:document.querySelector('.name').value,
城市:document.querySelector('.city').value,
学院:document.querySelector(“.college”).value,
课程:document.querySelector('.course').value,
年龄:document.querySelector('.age').value,
}
//存储您在使用之前获得的数据
var-input=getInput;
//创建一个新的id
变量ID;
如果(data.length>0){
ID=data[data.length-1].ID+1;
}否则{
ID=1;
}
//使用构造函数并创建新数据
var newForm=newstudentform(ID,input.name,input.city,input.college,input.course,input.age);
//将学生数据添加到ds中
数据推送(newForm);
//显示文档中的数据
//显示对象数据的html行
var html='%id%%name%%city%%college%%course%%age%Delete';
//用实际数据替换占位符
var newHtml=html;
//newHtml=“%id%”。替换(/%id%/g,id)
newHtml=newHtml.replace(“%roll%”,ID);
newHtml=newHtml.replace(“%id%”,id);
newHtml=newHtml.replace(“%name%”,input.name);
newHtml=newHtml.replace(“%city%”,input.city);
newHtml=newHtml.replace(“%college%”,input.college);
newHtml=newHtml.replace(“%course%”,input.course);
newHtml=newHtml.replace(“%age%”,input.age);
//获取要打印数据的元素
document.querySelector('.tablemain').insertAdjacentHTML('beforeend',newHtml);
//清除字段
var fields=document.queryselectoral('.name'+'、'+'.city'+'、'+'.college'+'、'+'.course'+'、'+'.age');
//将其转换为数组
var fieldsArr=Array.prototype.slice.call(字段);
//循环遍历所有字段以清除字段
fieldsArr.forEach(函数(当前、索引、数组){current.value='';});
fieldsArr[0]。焦点();
//删除元素
//父元素类=表id=id删除按钮类=delbtn
console.log(newForm);
返回新表单;
}
document.querySelector('.btn')。addEventListener('click',submitForm);
//删除节
//删除元素
//父元素类=表id=id删除按钮类=delbtn
document.querySelector(“.table”).addEventListener('click',delItem);
函数delItem(e){
var iTemId,splitID;
iTemId=e.target.parentNode.parentNode.id;
if(iTemId){
splitID=iTemId.split('-');
var ElementID=parseInt(splitID[1]);
var deleteItem=函数(id){
var id=data.map(函数(cur){
返回当前id;
});
var index=id.indexOf(id);
如果(索引!=-1){
数据切片(索引,1);
}
};
deleteItem(ElementID);
};
};

提交
IDNameCity学院课程删除

对于将来的问题,如果您能尽可能简化您的问题,您将得到更多的回答。你发布的代码有点难以理解

话虽如此,我认为问题在这里
data.slice(索引,1)
Array.prototype.slice
不会改变原始数组。它返回一个新数组。出于这个原因,有时人们使用它来创建数组的副本,以避免类似于
const arrCopy=originalArr.slice()的变异

我想您正在寻找数组
splice
方法


希望这能让你更亲近。
数据在哪里声明?我看到您对它做了各种各样的事情,并将其视为全局变量,但不确定在何处声明它。

Splice和Slice都是JavaScript数组函数。
splice()

这里使用的是
切片
,而不是
拼接
。如果要使用
切片
,请返回生成的数组或将
切片
替换为
拼接

if(索引!=-1){
数据拼接(索引1);
}
//或
如果(索引!=-1){
const newData=data.slice(索引,1);
}

我刚刚修改了
delItem
函数

  • 删除表行
  • 将索引设置为-1(因为数组从0开始)
//学生表单的构造函数
var studentForm=函数(iD、姓名、城市、学院、课程、年龄){
this.id=id;
this.name=名称;
this.city=城市;
这个学院=学院;
本课程=课程;
这个。年龄=年龄;
}
//所有数据都作为对象存储在这里
var数据=[];
//提交和显示表单的函数
var submitForm=function(){
//从字段获取输入数据
var getInput={
名称:document.querySelector('.name').value,
城市:document.querySelector('.city').value,
学院:document.querySelector(“.college”).value,
课程:document.querySelector('.course').value,
年龄:document.querySelector('.age').value,
}
//存储您在使用之前获得的数据
var输入=ge