在JavaScript中,是否可以只使用.filter()来删除重复项(第一个实例是保留的实例)
In JavaScript, is it possible to only use .filter() to remove duplicates (the first instance is the one that is kept)?
我有一个简单的解决方案:
function removeExtra(arr) {
var args = [...arguments]
.reduce(function(prev,curr){return prev.concat(curr)});
var answer = [];
for (var i = 0; i < args.length; i++) {
if (answer.indexOf(args[i]) == -1)
answer.push(args[i]);
}
return answer;
}
console.log(removeExtra([1, 3, 2], [5, 2, 1, 4], [2, 1]));
//-> Returns [1, 3, 2, 5, 4]
但是,我正在尝试实践JavaScript函数方法的逻辑,在本例中是.filter()
。有办法这样做吗?
function removeExtra(arr) {
return [...arguments]
.reduce( (pre,cur) => pre.concat(cur) )
//.filter( x => ??? );
}
console.log(removeExtra([1, 3, 2], [5, 2, 1, 4], [2, 1]));
//-> Should be [1, 3, 2, 5, 4]
编辑1:
如建议,目前正在研究Set()
。这是我第一次遇到它。马上回来做研究工作!
编辑2:
非常感谢@Kaspars和@gcampbell介绍Set()
!!我现在有了我的解决方案:
function removeExtra(someArgs) {
return [... new Set(
[...arguments].reduce(function(prev,curr){
return prev.concat(curr);
})
)]
}
这只是对gcampbell答案的一个小修订,因为我必须使用[... new Set()]
将Set
转换回Array
您可以使用Set。
function removeExtra() {
const uniques = new Set();
for(const array of ...arguments) {
for(const element of array) {
uniques.add(element);
}
}
return Array.from(uniques);
}
相关文章:
- 如何删除特定文本短语的所有实例
- 使用javascript删除特定HTML实体(breadcrumb)的最后一个实例
- 删除所有CKEditor实例
- 为什么在删除指令之后“;人;类的实例仍然存在
- CodeMirror 删除编辑器实例
- 删除数据网格 (Dojo) 和表 (数据网格) 的实例正确显示
- 删除聚合物元素,文件上传在实例上传时逐渐添加更多文件
- jQuery插件实例并删除/销毁它们
- 如何在 Angularjs 视图中删除 dom 实例
- 单击按钮时删除类的所有实例
- 删除多个字符之一的第一个实例之后的所有内容
- 有没有办法使用 gulp 删除 require.js 定义([..]) 包装器的所有实例
- 如何使用续集/ MySQL删除特定实例的关系
- 如何删除多维数据集.js实例的一天之后的事件
- 使用其他javascript删除字符串中某个字符的所有实例
- 在Javascript中,我应该删除以前的级别吗;s实例
- Javascript:当生成id时,需要删除页面上一个类的单个实例
- 重置'setIntervall'计数器/删除现有实例
- 删除多余的;#字符串中的实例
- 使用实例删除javascript中基于id的对象