Javascript 从数组中删除多次出现的所有元素
在人们认为这与关于堆栈溢出的所有其他关于删除重复项的答案相同之前,您可以看看返回的内容,而不是我希望执行的操作 我想删除所有多次出现的元素。我尝试了以下方法:Javascript 从数组中删除多次出现的所有元素,javascript,ecmascript-6,Javascript,Ecmascript 6,在人们认为这与关于堆栈溢出的所有其他关于删除重复项的答案相同之前,您可以看看返回的内容,而不是我希望执行的操作 我想删除所有多次出现的元素。我尝试了以下方法: const a=['罗纳尔多','贝利','马拉多纳','梅西','贝利']; const uniqueArray=a.filter(函数(项目、位置){ 返回a.indexOf(项目)=pos; }) console.log(uniqueArray)为什么不使用设置 const theSet = new Set(a); const v
const a=['罗纳尔多','贝利','马拉多纳','梅西','贝利'];
const uniqueArray=a.filter(函数(项目、位置){
返回a.indexOf(项目)=pos;
})
console.log(uniqueArray)
为什么不使用设置
const theSet = new Set(a);
const values = set.values();
const uniqueArray = Array.from(values);
您可以计算每个迭代中的项目,以便将其包括在条件中:
const a=['罗纳尔多','贝利','马拉多纳','梅西','贝利'];
const uniqueArray=a.filter(函数(项目、位置){
var c=a.filter(i=>i==item).length;
返回a.indexOf(item)=pos&&c简言之:如果元素第一次出现的位置(indexOf
)也是元素在数组中的最后一个位置(lastIndexOf
),则保留该值
如果索引不相等,则复制该值,您可以放弃该值
const a = ['Ronaldo', 'Pele', 'Maradona', 'Messi',
'Pele', 'Messi', 'Jair', 'Baggio', 'Messi',
'Seedorf'];
const uniqueArray = a.filter(function(item) {
return a.lastIndexOf(item) == a.indexOf(item);
});
console.log(uniqueArray);
/* output: ["Ronaldo", "Maradona", "Jair", "Baggio", "Seedorf"] */
最简单的方法是检查多个事件:
a.filter((el, i) => !(a.indexOf(el) !== i || a.indexOf(el, i) > -1)));
或者一个更复杂的具有多个集合的集合(但O(n)):
您可以使用a来计算每个条目出现的次数,然后只取只出现一次的条目
const a=['罗纳尔多','贝利','马拉多纳','梅西','贝利'];
const uniqueArray=onlyUniqueItems(a);
console.log(uniqueArray)
函数onlyUniqueItems(数组){
常量映射=新映射();
常量结果=[];
array.forEach(项=>{
让数量=地图。获取(项目)| | 0;
map.set(项,++金额);//预先递增,然后设置金额
});
map.forEach((金额、项目)=>{
如果(金额=1){
结果:推送(项目);
}
});
返回结果;
}
包含Pele
。仔细看啊,好吧,所以你想删除所有多次出现的元素…是的,@jonaswillms更新了这个问题,因为它可能不是很清楚,因为OP想完全忽略重复的值-如果一个值有重复的值,根本不包括它。我将不得不给你一个赞成添加的投票巴乔:-丹德认为巴乔只做了一条腿,做了他职业生涯的一大部分。注意,对于长阵列来说,这是非常低效的(二次比较数),尽管ES。
const found = new Set, values = new Set;
for(const el of a)
if(!found.has(el)) {
found.add(el);
values.add(el);
} else if(values.has(el) {
values.delete(el);
}
}
const result = [...values.values()];