使用javascript过滤器从数组中删除元素

时间:2015-11-15 21:31:55

标签: javascript arrays

我有两个数组,想要使用过滤功能删除重复项。

这是我的代码:

arr1 = [1, 2, 3, 1, 2, 3];
arr2 = [2, 3];
result = [1, 1];


var result = arr1.filter(function(value, index) {
      for (var i = 0; i <= arr2.length; i++) {
        if (value !== arr2[i]) {

          return value === arr2[i];
        }

      }
    }

提前致谢!任何帮助都会很棒!

5 个答案:

答案 0 :(得分:2)

您可以尝试将参数转换为数组,然后检查初始数组中的值是否在arguments数组中:

function destroyer(arr) {

  // Converting arguments into array
  var args = Array.prototype.slice.call(arguments);

  arr = arr.filter(function (val) {
    return args.includes(val)===false;
  });

    return arr;
}


destroyer([1, 2, 3, 1, 2, 3], 2, 3); // returns[1,1]

答案 1 :(得分:0)

首先,如果添加库不是问题。我正在使用underscore.js中的 uniq

  

uniq_.uniq(array,[isSorted],[iteratee])别名:unique

     

使用===来测试对象,生成无副本版本的数组   平等。特别是只有每个值的第一次出现   保持。如果您事先知道数组已排序,则传递true   for isSorted将运行更快的算法。如果你想计算   基于转换的唯一项,传递一个iteratee函数。

     

_。uniq([1,2,1,4,1,3]);   =&GT; [1,2,4,3]

其他解决方案是使用纯JS:

var newArray = [1, 2, 2, 3, 3, 4, 5, 6];
   var unique = newArray.filter(function(itm, i, a) {
      return i == newArray.indexOf(itm);
   });
   alert(unique);

但首先你需要在一个新数组中组合你的数组:

var newArray = arr1.concat(arr2);

JS Fiddle

我希望这有帮助! :)

答案 2 :(得分:0)

这是没有过滤功能的一种方式:

var arr1 = [1, 2, 3, 1, 2, 3];
var newArr = [];
for(var i = 0;i < arr1.length;i++){
    if (newArr.indexOf(arr1[i]) === -1) {
        newArr.push(arr1[i]);
    }
}

答案 3 :(得分:0)

与此JS Fiddle一样,使用filter()

&#13;
&#13;
arr1 = [1, 2, 3, 1, 2, 3];
arr2 = [2, 3];
result = [1, 1];


var result = arr1.filter(myFunc);


function myFunc(value) { 
  for (var i = 0; i < arr2.length; ++i) {
    // to remove every occurrence of the matched value
    for (var j = arr1.length; j--;) {
      if (arr1[j] === arr2[i]) {
        // remove the element
        arr1.splice(j, 1);
      }
    }
  }
}
document.getElementById('result').innerHTML = arr1;
console.log(arr1);
// Output: [1,1]
&#13;
<div id="result"></div>
&#13;
&#13;
&#13;

答案 4 :(得分:0)

只需使用Array.prototype.filter()

即可
  

filter()方法创建一个新数组,其中包含通过所提供函数实现的测试的所有元素。

Array.prototype.indexOf()

  

indexOf()方法返回可在数组中找到给定元素的第一个索引,如果不存在则返回-1。

var arr1 = [1, 2, 3, 1, 2, 3],
    arr2 = [2, 3],
    result = arr1.filter(function (a) {
        return !~arr2.indexOf(a);
    });

document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');