我正在尝试检查坐标[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!
答案 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(检查控制台输出)