我有两个数组,想要使用过滤功能删除重复项。
这是我的代码:
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];
}
}
}
提前致谢!任何帮助都会很棒!
答案 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);
我希望这有帮助! :)
答案 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()
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;
答案 4 :(得分:0)
filter()
方法创建一个新数组,其中包含通过所提供函数实现的测试的所有元素。
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>');