如何使用javascript从数组中删除元素

时间:2016-10-08 05:33:02

标签: javascript jquery arrays

我有2个数组,并希望根据第一个数组上的位置数删除第二个数组的元素。

var notexists = []; //value is "1","5","8" on 0,1,2nd position. 
var copyrequiredfields = [];//Value is "a","b","c","d","e","f",...
for (var i = 0; i < notexists.length; i++) {
     copyrequiredfields.splice(parseInt(notexists[i]), 1);
}

根据示例,我想从copyrequiredfields中删除第1个第5个和第8个元素。 请提出一些答案。

3 个答案:

答案 0 :(得分:1)

创建一个新数组,迭代copyrequiredfields,当notexists中的索引忽略它时。

示例:

var notexist = [1,2,5];
var copyrequiredfields = ['a','b','c','d','e','f','g'];
//create a index map
var index_map = {};
for(var i = 0; i < notexist.length; i++){
    index_map[notexist[i]] = true;
}
//remove the elements
var newarray = [];
for(var i = 0; i < copyrequiredfields.length; i++){
    if(!index_map[i]){
        newarray.push(copyrequiredfields[i]);
    }
}
copyrequiredfields = newarray;

答案 1 :(得分:1)

在JS中,数组的索引以0而不是1开头,所以你只需要在splice之前从value中减去1。其余的代码很好。

一个问题是,当你从数组中删除元素时,元素会被移回1个位置。这会给你不正确的输出。 1 hack是计算移除的元素数量以计算移动。

更好的解决方案是使用array.filter

方法Array.splice

&#13;
&#13;
var notexists = ["1", "5", "8"]; //value is  on 0,1,2nd position. 
var copyrequiredfields = ["a", "b", "c", "d", "e", "f", "g", "h", "i"]; //Value is "a","b","c","d","e","f",...
var count=0;
for (var i = 0; i < notexists.length; i++) {
  console.log(+notexists[i] - 1)
  copyrequiredfields.splice(+notexists[i]-1-count++, 1);
}

console.log(copyrequiredfields)
&#13;
&#13;
&#13;

Array.filter

&#13;
&#13;
var notexists = ["1", "5", "8"]; //value is  on 0,1,2nd position. 
var copyrequiredfields = ["a", "b", "c", "d", "e", "f", "g", "h", "i"]; //Value is "a","b","c","d","e","f",...
var r = copyrequiredfields.filter((x,i)=>notexists.indexOf((i+1).toString()) === -1)
console.log(r)
&#13;
&#13;
&#13;

答案 2 :(得分:0)

你可以复制整个数组,除了你不再需要的部分:

var tempCopy = [];
for (var i=0; i < copyrequiredfields.length; i++)
    if(notexists.indexOf(i)==-1)
        tempCopy.push(copyrequiredfields[i]);
copyrequiredfields = tempCopy;

电贺!