Node.js 如何减少TypeScript中的2D数组以返回唯一子数组的2D数组?
我试图减少我的2D数组,这样就不会有重复的子数组。我使用了.reduce()方法来处理这个问题,但是我的条件语句似乎并不像人们想象的那样工作 请参考标准以了解更多信息。让我知道,如果你知道如何使这项工作或一个可能的解决办法Node.js 如何减少TypeScript中的2D数组以返回唯一子数组的2D数组?,node.js,typescript,multidimensional-array,types,reduce,Node.js,Typescript,Multidimensional Array,Types,Reduce,我试图减少我的2D数组,这样就不会有重复的子数组。我使用了.reduce()方法来处理这个问题,但是我的条件语句似乎并不像人们想象的那样工作 请参考标准以了解更多信息。让我知道,如果你知道如何使这项工作或一个可能的解决办法 const unique = result.reduce<number[][]>((accum, curr) => { if (!accum.includes(curr)) { console.log('accum:'
const unique = result.reduce<number[][]>((accum, curr) => {
if (!accum.includes(curr)) {
console.log('accum:', accum);
console.log('curr', curr);
return [...accum, curr];
}
else{
return accum;
}
}, []);
console.log('\nresult', result);
console.log('unique', unique);
/*
stdout:
accum: []
curr [ 0, -1, 1 ]
accum: [ [ 0, -1, 1 ] ]
curr [ 0, -1, 1 ]
accum: [ [ 0, -1, 1 ], [ 0, -1, 1 ] ]
curr [ 2, -1, -1 ]
result [ [ 0, -1, 1 ], [ 0, -1, 1 ], [ 2, -1, -1 ] ]
unique [ [ 0, -1, 1 ], [ 0, -1, 1 ], [ 2, -1, -1 ] ]
desired output:
unique [ [ 0, -1, 1 ], [ 2, -1, -1 ] ]
*/
const unique=result.reduce((累计,当前)=>{
如果(!累计包括(当前)){
console.log('acum:',acum);
console.log('curr',curr);
返回[…累计,当前];
}
否则{
返回累计;
}
}, []);
console.log('\nresult',result);
console.log('unique',unique);
/*
标准:
累计:[]
货币[0,-1,1]
累计:[[0,-1,1]]
货币[0,-1,1]
累计:[[0,-1,1],[0,-1,1]]
货币[2,-1,-1]
结果[[0,-1,1],[0,-1,1],[2,-1,-1]]
唯一的[[0,-1,1],[0,-1,1],[2,-1,-1]]
期望输出:
唯一的[[0,-1,1],[2,-1,-1]]
*/
只需使用设置
。请记住,它只适用于基本值数组
const makeUnique=(arr:T[])=>[…新集合(arr)];
const unique2D=[[1,1,2],[2,2,2,1],[3,3,3]]。reduce((acc,elem)=>
[…acc,makeUnique(elem)]
, []
)
更新
const makeUnique=(arr:T[])=>[…新集合(arr)];
类型main类型=编号[]
const unique2D=(arr:Array)=>
arr.reduce((acc,elem)=>[…acc,makeUnique(elem)],[])
const getDublicates=(arr1:Array,arr2:MainType)=>{
返回arr1.reduce((acc、elem、index)=>
元素长度===arr2.length&&arr2.every(el=>elem.includes(el))
?[…附件,索引]
:acc
,[]作为主类型)
};
常量检查=(arr:Array)=>{
const dublicates=arr.reduce((acc,elem)=>makeUnique([…acc,…getDublicates(arr,[…elem]).slice(1)],[]);
返回arr.filter((u,index)=>!dublicates.includes(index))
};
常量结果=检查(唯一2D([[0,-1,1],[2,-1,-1],[3,3],[3],[4]);
我找到了一个暂时有效的解决方案。如果有人能用Set或.reduce()解决这个问题,请告诉我
const result: number[][] = new Array(); //results obtained later on in code
const Unique: {[key: string]: number} = {}; //store unique results in a hash
const solution: number[][] = new Array();
let target;
//remove possible duplicates:
for (let i = 0; i < result.length; i++) {
let key = JSON.stringify(result[i]);
if (!Unique[key]) {
Unique[key] = 0;
}
}
for (let key in Unique) {
solution.push(JSON.parse(key))
}
return solution;
const结果:number[][]=new Array()//随后在代码中获得的结果
常量唯一:{[key:string]:number}={}//将唯一结果存储在散列中
常量解决方案:编号[][]=新数组();
让目标;
//删除可能的重复项:
for(设i=0;i
我尝试了makeUnique(结果)
并得到了。。。“类型为'number[][]的参数不能分配给类型为'(string | number | symbol)[]的参数。”我为您的案例做了一个更新,请记住,如果您有对象数组,Set
将不起作用。我非常感谢您的帮助,但我正在尝试删除2D数组中的重复数组。您的解决方案将删除数组中的重复值。@我进行了更新,请尝试,它将从2D数组中删除重复值。选中unique2D