Javascript数组,删除相同的组合数字,但顺序不同
我只需要逻辑删除相同的组合3位,但只是不同的顺序,只是推最低的值 假设我有以下数组:Javascript数组,删除相同的组合数字,但顺序不同,javascript,arrays,sorting,Javascript,Arrays,Sorting,我只需要逻辑删除相同的组合3位,但只是不同的顺序,只是推最低的值 假设我有以下数组: var array = [211, 112, 121, 456, 564, 731, 898]; var array = [112, 456, 731, 898] 提交时,它将只推送以下数组: var array = [211, 112, 121, 456, 564, 731, 898]; var array = [112, 456, 731, 898] 因为,211、112和121是相同的数字,但顺序
var array = [211, 112, 121, 456, 564, 731, 898];
var array = [112, 456, 731, 898]
提交时,它将只推送以下数组:
var array = [211, 112, 121, 456, 564, 731, 898];
var array = [112, 456, 731, 898]
因为,211、112和121是相同的数字,但顺序不同,它只按了112,因为它是三个数字中最低的。456和564也一样
一个示例代码非常好,在堆栈溢出上也找不到它。您可以获取一个数组,并为结果数组收集最小值
这适用于未排序的数据
var数组=[211112121456564731898],
结果=数组.from(数组.reduce)((映射,值)=>{
var key=value.toString().split(“”).sort().join(“”),
last=map.get(键);
返回map.set(key,last 控制台日志(结果)代码>这是我做这件事的方法
如果您想选择第一个,这将使用另一个集合跟踪,以查看是否已返回
编辑:要获取最小值,预排序将执行此操作
const数组=[211112121456564731898];
功能重复数据消除(arr){
常数a=arr.sort((a,b)=>a-b);
const got=新集合();
const mapped=array.map(m=>m.toString().split(“”).sort().join(“”));
常数ret=[];
mapped.forEach((v,ix)=>{
如果(得到了(v))返回;
获得。添加(v);
再推(a[ix]);
});
返回ret;
}
console.log(重复数据消除(阵列))
使用reduce
的简单解决方案:
var数组=[211112121456564731898];
var result=array.sort().reduce((全部,项)=>{
var el=数字(字符串(项).split(“”).sort().join(“”));
如果(所有索引)为(el)=-1)所有推送(项目)
全部归还;
}, []);
控制台日志(结果)代码>基本上,如果要从列表中删除数字的所有排列,请尝试以下操作:
let数组=[211112121456564731898];
array.sort();
var结果=[];
设集合=新集合();
array.forEach((a)=>{
设temp=a.toString().split(“”).sort().join();
如果(设置有(温度))
返回;
设置。添加(临时);
结果:推(a);
});
控制台日志(结果)一个衬里和ES6的代码>。你可以用这个
Array.from(
new Set(
[211, 112, 121, 456, 564, 731, 898]
.map(x => parseInt(x.toString().split('').sort().join('')))
)
)
这是我的贡献,非常不乐观和混乱,我知道上面有更简单的方法来解决它
我所做的:
- 迭代数组
- 转换数字
.toString()
- 获取每个字符串索引的总和,并使用
sum
和索引创建一个对象
- 如果元素的编号相同但位置不同,则总和将保持不变
- 稍后,删除对象的重复项
- 返回新数组
let数组=[211112121456564731898];
功能移除副本(myArr,道具){
返回myArr.过滤器((obj、pos、arr)=>{
返回arr.map(mapObj=>mapObj[prop]).indexOf(obj[prop])==pos;
});
}
函数移除相似(arr){
设arresums=[];
设finalArray=[];
arr.forEach((el,i)=>{
设numStr=el.toString();
设和=0;
for(设i=0;i{
finalArray.push(arr[index]);
});
返回最终射线;
}
log(removeSimilar(数组))代码>一个想法是将每一个都转换成一个字符串,拆分然后排序,最后比较。这就是我要展示的,出于好奇,使用正则表达式拆分从执行中获得了什么好处。拆分(“”)
?@Keith,哦,对不起,这很有趣。您使用相同的第一个值,但不是最小的值。