打字稿:搜索2D数组中是否存在数组(行)

时间:2017-06-14 13:26:48

标签: typescript search multidimensional-array

我正在尝试检查坐标[x,y,z]数组是否存在于其他坐标[[x,y,z],[x',y',z']的二维数组中。 ]。我想知道indexOf是否可以在这里使用。

var ALLcoordinates:number[][];
ALLcoordinates = [];

var coordinates: number[];
coordinates = [alea1, alea2, alea3];


for (var i=0; i< dims; i++) {
    ALLcoordinates[i]=[];
    for (var j=0; j<chainSize; j++){
        ALLcoordinates[i][j]=0;
    }
}

那么如何“按行”搜索Typescript?我可以为{2}数组调整indexOf,还是必须使用循环?这是我的代码,但是我在数据类型上得到了一个明显的错误:“类型'数字[]'的参数不能分配给'number'类型的参数。”

if (coordinates.indexOf(ALLcoordinates) == -1) {

        // do stuff
 }

我会很高兴得到任何帮助或想法,而不是x!

2 个答案:

答案 0 :(得分:0)

我会声明两个自定义类Vector3&amp; Pair

class Vector3 {

    public constructor(
        public x: number,
        public y: number,
        public z: number
    ) { }

    public isEqual(vector: Vector3) {
        return vector.x === this.x &&
            vector.x === this.x &&
            vector.x === this.x; 
    }

}

class Pair {

    public constructor(
        private v1: Vector3,
        private v2: Vector3
    ) { }

    public getIndex(vector: Vector3) {
        if (this.v1.isEqual(vector)) return 0;
        if (this.v2.isEqual(vector)) return 1;
        return -1;
    }

    public contains(vector: Vector3) {
        return this.getIndex(vector) !== -1;
    }

}

然后,您最终会得到一个适合您用例的API:

const v1 = new Vector3(1, 2, 3);
const v2 = new Vector3(4, 5, 6);
const v3 = new Vector3(7, 8, 9);

const pair = new Pair(v1, v2);

console.log(
    pair.contains(v1), // true
    pair.contains(v2), // true
    pair.contains(v3)  // false
);

答案 1 :(得分:0)

你可以为它写一个function

let ALLcoordinates:number[][] = [[1, 2, 3],[4, 5, 6],[7, 8, 9]];
let coordinates1: number[] = [1, 2, 3];
let coordinates2: number[] = [2, 3, 1];

function contains(array2d: number[][], array: number[]) {
    let result = array2d.filter((item) => {
        if(item.length === array.length) {
            for(var i = 0; i < item.length; i++) {
                if(item[i] !== array[i]) {
                    return false;
                }
            }
            return true;
        }
        return false;
    });
    return result.length > 0;
}

console.log(contains(ALLcoordinates, coordinates1)); //true
console.log(contains(ALLcoordinates, coordinates2)); //false

可测试Here(检查控制台输出)