Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何减少TypeScript中的2D数组以返回唯一子数组的2D数组?_Node.js_Typescript_Multidimensional Array_Types_Reduce - Fatal编程技术网

Node.js 如何减少TypeScript中的2D数组以返回唯一子数组的2D数组?

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:'

我试图减少我的2D数组,这样就不会有重复的子数组。我使用了.reduce()方法来处理这个问题,但是我的条件语句似乎并不像人们想象的那样工作

请参考标准以了解更多信息。让我知道,如果你知道如何使这项工作或一个可能的解决办法

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