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

Remove elements from array using javascript filter

本文关键字:删除 元素 数组 javascript 过滤器 使用      更新时间:2023-09-26

我有两个数组,希望使用filter函数删除重复的数组。

这是我的代码:

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];
        }
      }
    }

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

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

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]

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

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

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

_.uniq([1,2,1,4,1,3]);=>[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

我希望这能有所帮助!:)

这里有一种没有过滤功能的方法:

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

只需使用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>');

如本JS Fiddle中所示,使用filter()

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]
<div id="result"></div>