Javascript 当存在重复时,如何从数组中删除*某些*项?(最好使用Lodash/下划线)

Javascript 当存在重复时,如何从数组中删除*某些*项?(最好使用Lodash/下划线),javascript,node.js,underscore.js,lodash,Javascript,Node.js,Underscore.js,Lodash,我正在尝试编写一个函数,从6个骰子的数组中过滤出三元组。使用Lodash或下划线是否有一种简单的方法 noTriplets([1,1,1,3,3,5])/=[3,3,5] notriplet([1,1,1,1,3,5])/=[1,3,5] notriplet([1,1,1,1,1,5])/=[1,1,5] noTriplets([1,1,1,5,5])/=[] noTriplets([1,1,1,1,1,1])/[]这有点粗糙和肮脏,但它并不要求你提前知道你的三胞胎。在noTriplets()

我正在尝试编写一个函数,从6个骰子的数组中过滤出三元组。使用Lodash或下划线是否有一种简单的方法

noTriplets([1,1,1,3,3,5])/=[3,3,5]
notriplet([1,1,1,1,3,5])/=[1,3,5]
notriplet([1,1,1,1,1,5])/=[1,1,5]
noTriplets([1,1,1,5,5])/=[]

noTriplets([1,1,1,1,1,1])/[]
这有点粗糙和肮脏,但它并不要求你提前知道你的三胞胎。在
noTriplets()
-中,我创建了一个快速hashMap,然后循环遍历该对象。循环逻辑处理三元组

const arrayTestOne=[1,1,1,3,3,5];
常数arrayTestTwo=[1,1,1,3,3,5];
常数arrayTestThree=[1,1,1,3,3];
常数arrayTestFour=[1,1,1,1,3,3,5,5,5,5,5,5,5,5,5,5,5,5,5,7];
常量hashMap=(数组)=>array.reduce((allNums,num)=>{
if(所有nums中的num){
allNums[num]++
}
否则{
allNums[num]=1
}
归还所有物品
}, {})
函数Notriplet(arr){
设newArr=[];
设obj=hashMap(arr);
for(obj中的var键){
for(设i=0;inoTriplets(arrayTestFour)
这有点粗糙和肮脏,但它并不要求你提前知道你的三胞胎。在
noTriplets()
-中,我创建了一个快速hashMap,然后循环遍历该对象。循环逻辑处理三元组

const arrayTestOne=[1,1,1,3,3,5];
常数arrayTestTwo=[1,1,1,3,3,5];
常数arrayTestThree=[1,1,1,3,3];
常数arrayTestFour=[1,1,1,1,3,3,5,5,5,5,5,5,5,5,5,5,5,5,5,7];
常量hashMap=(数组)=>array.reduce((allNums,num)=>{
if(所有nums中的num){
allNums[num]++
}
否则{
allNums[num]=1
}
归还所有物品
}, {})
函数Notriplet(arr){
设newArr=[];
设obj=hashMap(arr);
for(obj中的var键){
for(设i=0;inoTriplets(arrayTestFour)
您可以对每个项目使用计数,并计算要忽略的项目数

函数notriplet(数组){
var hash={};
array.forEach(函数(a){
hash[a]=hash[a]|{count:0};
散列[a].ignore=Math.floor(++hash[a].count/3)*3;
});
返回数组.filter(函数(a,i){
return--hash[a]。忽略<0;
});
}
log(noTriplets([1,1,1,3,3,5]);//[3, 3, 5]
log(noTriplets([1,1,1,1,3,5]);//[1, 3, 5]
log(noTriplets([1,1,1,1,1,5]);//[1, 1, 5]
log(noTriplets([1,1,1,5,5]);//[]
log(noTriplets([1,1,1,1,1,1]);//[]

。作为控制台包装{max height:100%!important;top:0;}
您可以使用每个项目的计数,并计算要忽略的项目数

函数notriplet(数组){
var hash={};
array.forEach(函数(a){
hash[a]=hash[a]|{count:0};
散列[a].ignore=Math.floor(++hash[a].count/3)*3;
});
返回数组.filter(函数(a,i){
return--hash[a]。忽略<0;
});
}
log(noTriplets([1,1,1,3,3,5]);//[3, 3, 5]
log(noTriplets([1,1,1,1,3,5]);//[1, 3, 5]
log(noTriplets([1,1,1,1,1,5]);//[1, 1, 5]
log(noTriplets([1,1,1,5,5]);//[]
log(noTriplets([1,1,1,1,1,1]);//[]

.as console wrapper{max height:100%!important;top:0;}
您可以使用一个对象来记录值,然后使用以前的对象生成一个新数组

函数notriplet(arr){
var tripletCount=arr.reduce((骰子,值)=>{
骰子[值]=骰子[值]| |{计数:0};
骰子[值]。计数=(骰子[值]。计数+1)%3;
返回骰子;
},{});
返回Object.keys(tripletCount).reduce((arr,key)=>{
返回arr.concat(新数组(tripletCount[key].count).fill(key));
},[]);
}
log(noTriplets([1,1,1,3,3,5]);//[3, 3, 5]
log(noTriplets([1,1,1,1,3,5]);//[1, 3, 5]
log(noTriplets([1,1,1,1,1,5]);//[1, 1, 5]
log(noTriplets([1,1,1,5,5]);//[]

log(noTriplets([1,1,1,1,1,1]);//[]
您可以使用对象记录值,然后使用以前的对象生成新数组

函数notriplet(arr){
var tripletCount=arr.reduce((骰子,值)=>{
骰子[值]=骰子[值]| |{计数:0};
骰子[值]。计数=(骰子[值]。计数+1)%3;
返回骰子;
},{});
返回Object.keys(tripletCount).reduce((arr,key)=>{
返回arr.concat(新数组(tripletCount[key].count).fill(key));
},[]);
}
log(noTriplets([1,1,1,3,3,5]);//[3, 3, 5]
log(noTriplets([1,1,1,1,3,5]);//[1, 3, 5]
log(noTriplets([1,1,1,1,1,5]);//[1, 1, 5]
log(noTriplets([1,1,1,5,5]);//[]

log(noTriplets([1,1,1,1,1,1]);//[]
我的纯JS通用解决方案。您可以指定应删除多少重复项。例如,这里创建了
noDoubles
noTriplets
nofourples
方法

函数isArrayWithidentialCalements(数组){
return array.length>1&&!!array.reduce(函数(a,b){return(a==b)→a:NaN;});
}
函数无重复(NumberOfRepeation,数组){
var sliceLength=numberofrepeation-1;
var指针=切片长度;
var元素=数组[指针];
while(元素){
if(isArrayWithidentialCalElements(array.slice(指针-切片长度,指针+1))){
拼接(指针-切片长度,NumberOfRepeation);
指针=指针-切片长度;
元素=数组[指针];
}否则{
指针=指针+