Javascript 在vue JS中使用索引从数组中删除项会返回意外结果
因此,我有以下数组:Javascript 在vue JS中使用索引从数组中删除项会返回意外结果,javascript,arrays,vue.js,array-splice,Javascript,Arrays,Vue.js,Array Splice,因此,我有以下数组: var hdr = ("name", "date", "start_time", "selling_item", "total_call", "end_time", "ad_num", "area", "order_num"); //this data is returned from db 现在我想用正确的命名约定来替换它,所以我要这样做: renameTableHdr(hdrs){ var handler = hdrs;
var hdr = ("name", "date", "start_time", "selling_item", "total_call",
"end_time", "ad_num", "area", "order_num");
//this data is returned from db
现在我想用正确的命名约定来替换它,所以我要这样做:
renameTableHdr(hdrs){
var handler = hdrs;
for(var a = 0; a<hdrs.length; a++){
// console.log(hdrs[a]);
var itm = "";
if(hdrs[a] === 'name'){
itm = "Name";
}
if(hdrs[a] === 'ad_num'){
itm = "Ad Number";
}
if(hdrs[a] === 'date'){
itm = "Date";
}
if(hdrs[a] === 'order_num'){
itm = "Order Number";
}
if(hdrs[a] === 'start_time'){
itm = "Start Time";
}
if(hdrs[a] === 'area'){
itm = "Area";
}
if(hdrs[a] === 'selling_item'){
itm = "Selling Item";
}
if(hdrs[a] === 'end_time'){
itm = "End Time";
}
if(hdrs[a] === 'total_call'){
itm = "Total Call";
}
if(handler.indexOf(hdrs[a]) >= 0){
handler.splice(handler.indexOf(hdrs[a]),1);
}
this.tempTblHdr.push(itm);
}
},
带有拼接的
(9) ["Ad Number", "Date", "Order Number", "Start Time", "Name", "Area", "Selling Item", "End Time", "Total Call", __ob__: Observer]
(5) ["Ad Number", "Order Number", "Name", "Selling Item", "Total Call", __ob__: Observer]
//other 4 data are missing
我正在从
处理程序
中删除这些项,因为它们是需要符合正确命名约定的主要数据,并且有可能会添加它们。我正在重命名它们,但没有触摸或更改它们的索引。我是否正确进行了拼接
从数组中删除项时,应该像这样向后循环
renameTableHdr(hdrs){
var handler = hdrs;
for(var a = hdrs.length - 1; a >= 0; a--){
// ...
}
}
我将通过以下方式简化转换,即不变异或使用for循环:
函数重命名TableHDR(hdrs){
//console.log(hdrs[a]);
常量转换={
姓名:'姓名',
广告编号:“广告编号”,
日期:'日期',
订单编号:“订单编号”,
开始时间:“开始时间”,
地区:'地区',
销售商品:“销售商品”,
结束时间:“结束时间”,
呼叫总数:“呼叫总数”,
“带空格的事物”:“翻译得很好”
};
返回hdrs.map((项)=>translate[item]| |“”);
}
console.log(
重命名标签([
“姓名”,
“日期”,
“开始时间”,
“出售商品”,
"电话总数",,
“结束时间”,
“ad_num”,
"地区",,
“订单数量”,
“XXXXXXXXXXXXXXXXXXXXXXXXXX”,
“有空格的东西”,
]),
);代码>从数组中删除项时,应该向后执行。原因是索引不断增长,即使您删除了该项
因此,如果我这样做:
let array = ["a", "b", "c", "d"];
for (let i = 0; i < array.length; i++) {
console.log(array.splice(i, 1));
}
您正在更改循环中的长度,为什么不将其重新分配,如hrds[a]=itm
?@HMR-Edited。我正在测试它,并复制了编辑后的一个;const hdrs=handler.map(item=>translated[item])代码>由于处理程序和HDR引用同一个对象,如果您对其中一个对象进行变异,您将同时对这两个对象进行变异。@TrungDong是的,这解决了我的问题,但我的索引现在受到影响。我的意思是,它们现在处于9-0
索引中,而不是0-9
。您可以尝试使用这个函数,而不是使用推送功能;谢谢这个人。更好更有效的方法。所以节省时间(phew)感谢这位输入者!有一个解释很好,它让事情变得更清楚:)
renameTableHdr(hdrs){
var handler = hdrs;
for(var a = hdrs.length-1; a>=0; a--){
// console.log(hdrs[a]);
var itm = "";
if(hdrs[a] === 'name'){
itm = "Name";
}
if(hdrs[a] === 'ad_num'){
itm = "Ad Number";
}
if(hdrs[a] === 'date'){
itm = "Date";
}
if(hdrs[a] === 'order_num'){
itm = "Order Number";
}
if(hdrs[a] === 'start_time'){
itm = "Start Time";
}
if(hdrs[a] === 'area'){
itm = "Area";
}
if(hdrs[a] === 'selling_item'){
itm = "Selling Item";
}
if(hdrs[a] === 'end_time'){
itm = "End Time";
}
if(hdrs[a] === 'total_call'){
itm = "Total Call";
}
if(handler.indexOf(hdrs[a]) >= 0){
handler.splice(handler.indexOf(hdrs[a]),1);
}
this.tempTblHdr.unshift(itm);
}
},