Javascript数组,删除相同的组合数字,但顺序不同

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是相同的数字,但顺序

我只需要逻辑删除相同的组合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是相同的数字,但顺序不同,它只按了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);
});

控制台日志(结果)。你可以用这个

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,哦,对不起,这很有趣。您使用相同的第一个值,但不是最小的值。