我正在尝试从数组中拼接一些定义值的所有实例。
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]
答案 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--否则字符串会缩短,然后你将错过要考虑的值:
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"]