2017-06-14 3 views
0

座標[x、y、z]の配列が他の座標[[x、y、z]の2次元配列に存在するかどうかを確認しようとしています]、[x '、y'、z ']、..]。 indexOfがここで使用できるのだろうかと思います。Typescript:配列(行)が2次元配列に存在するかどうかを調べる

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で行単位で検索できますか? indexOfを2D配列に適合させることはできますか、またはループを使用する必要はありますか?ここに私のコードですが、私は明らかにデータ型にエラーがあります:"型 'number'の引数は 'number'型のパラメータに代入できません。"

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

     // do stuff 
} 

私は任意のヘルプやアイデア、ありがとうのために喜んでいるだろう!

答えて

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(出力のためにコンソールを確認)

0

私は2つのカスタムクラスVector3 & 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

私のプロジェクトでは素晴らしいですが、少し重すぎます。 indexOfを適用できない場合は、関数を使用します。ありがとう:) –

関連する問題