我有一個網格方塊的坐標串列:

每個方塊由一個類定義:
class Square {
constructor(x, y) {
this.x = x;
this.y = y;
}
}
應用程式是這樣作業的:首先顯示一個隨機生成的方塊串列,然后用戶必須從記憶體中點擊方塊。(不一定按順序)
問題/答案陣列的示例:(只是一個示例,它們實際上是隨機生成的)
const arr = [new Square(1, 1), new Square(2, 1)]
現在,每當用戶點擊一個框時,它就會進入另一個陣列:
var selectedBlocks = [new Square(2, 1), new Square(1, 1)]
在這種情況下,由于選擇的平方相等,函式應該回傳 true。
我嘗試過的 - 如果沒有雙 for 回圈 O(n^2),我將無法獲得它。是否可以優化至少為 O(n)?
uj5u.com熱心網友回復:
您可以使用 Array.some 來查找專案是否已被選中
class Square {
constructor(x, y) {
this.x = x;
this.y = y;
}
}
const arr = [new Square(1, 1), new Square(2, 1)];
const selectedBlocks = [new Square(2, 1), new Square(1, 1)];
const isSelected = (block) => {
return selectedBlocks.some(
(item) => item.x === block.x && item.y === block.y
);
};
console.log(isSelected(new Square(2, 1)));
console.log(isSelected(new Square(2, 2)));
console.log(isSelected(new Square(1, 1)));
uj5u.com熱心網友回復:
參考另一個問題的答案,該問題的答案也可能有所幫助。如果您只需要知道 A 和 B 是否具有相同的條目,只需使用
JSON.stringify(A.concat().sort()) === JSON.stringify(B.concat().sort())
原始答案的鏈接在這里。
uj5u.com熱心網友回復:
我忘記了內置方法很少,我寫了這個我猜(nlogn)時間復雜度代碼
class Square {
constructor(x, y) {
this.x = x;
this.y = y;
}
pri(){
return this.x this.y;
}
}
let inp = [new Square(2,1), new Square(2,3), new Square(1,3)]
let opt = [new Square(1,3), new Square(2,1), new Square(2,3)]
inp.sort((a, b) => {
return a.pri() - b.pri();
});
opt.sort((a, b) => {
return a.pri() - b.pri();
});
// assuminng they are of same len
let flag = true
for(i=0; i<inp.length ; i ){
if(inp[i].x != opt[i].x || inp[i].y != opt[i].y){
flag = false
break
}
}
console.log(flag)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/399090.html
標籤:javascript 数组 目的
下一篇:添加逗號作為用戶型別編號(例如:1,000/10,000/100,000/1,000,000/10,000,000等
