Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在vue JS中使用索引从数组中删除项会返回意外结果_Javascript_Arrays_Vue.js_Array Splice - Fatal编程技术网

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);
    }
},