Javascript:拼接Array中所有元素实例

时间:2013-03-03 19:55:34

标签: javascript splice

我正在尝试从数组中拼接一些定义值的所有实例。

    filterfunc: function(anyArray){
      for(var i = 0; i <anyArray.length; i++){
        var v = anyArray[i];
          for(var j = 1; j <arguments.length; j++){
           if(v == arguments[j]){
              anyArray.splice(i,1);
            }
          }
        } 
          return anyArray;
      },

我传递了一个数组以及我不想要的参数。

我遇到的问题是splice函数没有拼接值的所有实例。

ex:filterfunc([1,2,2,2,3,3,3,4,5,6],2,3); 结果:[1,2,3,3,4,5,6]

我希望它返回[1,4,5,6]

8 个答案:

答案 0 :(得分:3)

我在JavaScript方面表现不佳,但删除数组项会减小它们的大小,在这种情况下,可以按向后顺序循环。

for(var i = anyArray.length-1; i>0; i--){
   var v = anyArray[i];
   for(var j = 1; j <arguments.length; j++){
      if(v == arguments[j]){
         anyArray.splice(i,1);
      }
   }
}

答案 1 :(得分:2)

我会发送第二个数组,例如:filterfunc([1,2,2,2,3,3,3,4,5,6],[2,3])并使用Array.prototype.filter()

function filterfunc(a, b) {
  return a.filter(function(x) { return b.indexOf(x) == -1; });
}

答案 2 :(得分:1)

在拼接之后添加一个i--否则字符串会缩短,然后你将错过要考虑的值:

http://jsfiddle.net/6HatJ/1/

function filterfunc(anyArray){
  for(var i = 0; i <anyArray.length; i++){
    var v = anyArray[i];
      for(var j = 1; j <arguments.length; j++){
       if(v == arguments[j]){
          anyArray.splice(i,1);
           i--;
        }
      }
    } 
      return anyArray;
  };

答案 3 :(得分:0)

Underscore包含许多有用的辅助函数,而uniq可能就是您正在寻找的内容。

如果你只想要这个功能而不是整个图书馆,你只需看看source code

答案 4 :(得分:0)

anyArray.splice(...)更改数组中元素的数量,从而更改现有元素的索引。每次删除元素时都应该将索引减少一个

anyArray.splice(i--,1);

答案 5 :(得分:0)

让我们使用forEach,并观察splice是一个就地函数。返回数组只是给了我们一个已经有的参考:

function remove(arr,elements) {
  elements.forEach(function(e) {
    for(var i=arr.length-1; i>=0; i--) {
      if(arr[i]==e) { arr.splice(i,1); }
    }
  });
}

// test
var a = [1,2,3,3,3,3,4,5,5,6,7,7],
    b  = [3,5,7];
remove(a,b);
a;

答案 6 :(得分:0)

while循环怎么样。

function removeInstanceOfElement(elem, arr)
{
    var index = 0;

    while(index < arr.length)
    {
        if(arr[index] == elem)
        {
            arr.splice(index, 1);
            index = 0;
        }
        else
        {
            ++index;
        }
    }

    return arr;
}

答案 7 :(得分:0)

你可以使用reduce来通过splice来完成数组。这是一个使用splice with reduce

的简单示例

假设我们有一个数组a并希望删除&#39; d&#39;

的所有实例
a = ['a', 'b', 'd', 'c', 'd'];
a.reduce((prevValReturned, currVal, currIndex, array) =>{
  if (currVal == 'd') a.splice(currIndex, 1);
}, 0);

在控制台中查看阵列a,您会看到它现在是

["a", "b", "c"]

然而,每次调用时,splice是n阶,移动所有连续的元素。如果使用非常大的数据集可能更好地循环并使用push

a = ['a', 'b', 'd', 'c', 'd'];
b= []
a.reduce((prevValReturned, currVal, currIndex, array) =>{
  if (currVal != 'd') b.push(currVal);
}, 0)

当然这不会改变数组a。在控制台中查看阵列b,您会看到

["a", "b", "c"]