上下文有沒有一種簡單的方法來快速將給定數組的所有內容傳遞給`Array.prototype`方法變量而不使用參數?
我創建陣列docket
跟蹤座標作爲用戶點擊畫布空間。在主程序循環期間,陣列將被繪圖功能掃描,以便可以看到選定的像素。最初,在我的事件監聽器中,我使用了push()
方法,但後來我意識到我想要一種切換像素的方法。
碼描述
所以我添加的方法poke()
到Array.prototype
,如下面看到的那樣,這使我到整個docket
陣列推入一個本地陣列param.array
並分配觸發座標到一個局部變量param.entry
。 entry
然後被推入array
,array
由主要的poke()
循環處理,以確保沒有重複的值。如果發現匹配,則兩個元素都被殲滅並且param.array
返回頂部,最終將docket
縮小1;如果沒有找到匹配,則沒有任何元素被消滅和param.array
返回到頂部,最終由1
主要問題擴大docket
:例如1
無論如何,該方法目前正在寫的,它必須被稱爲:
docket.poke(docket, e.key);
注意:爲了簡單起見,我使用了鍵盤鍵值。
Array.prototype.poke = function(a, b) {
var bool = { }, i = { }, param = { };
param.array = a; param.entry = b;
//
param.array.push(param.entry);
i.len = param.array.length;
i.end = i.len - 1;
//
for (i.cur = 0; i.cur < i.len; i.cur++) {
bool.match = param.array[ i.cur ] == param.array[ i.end ];
bool.nSelf = !(i.cur == i.end);
//
if (bool.match && bool.nSelf) {
param.array.splice(i.end, 1);
param.array.splice(i.cur, 1);
//
i.end -= 2;
i.len -= 2;
}
}
//
return param.array;
}
這似乎有點多餘,但它提供了兩個關鍵優勢。首先要可讀性和審美。能夠明顯地將docket
的內容傳遞給本地數組進行處理,然後將結果明顯地返回到頂端,我認爲這對理解非常有幫助。其次,這個例子和下一個例子都使用了一種令人困惑的真理測試來過濾重複值檢測中的誤報。這個例子沒有太多。它可以很容易地被重寫,比較param.array
到param.entry
中的每個元素,使用緊密的,沒有廢話的循環。
主要問題:例如2
docket.poke(e.key);
是較少冗餘和更期望的方法。這是我的代碼。
Array.prototype.poke = function(a) {
var bool = { }, entry = a, i = { };
//
this.push(entry);
i.len = this.length;
i.end = i.len - 1;
//
for (i.cur = 0; i.cur < i.len; i.cur++) {
bool.match = this[ i.cur ] == this[ i.end ];
bool.nSelf = !(i.cur == i.end);
//
if (bool.match && bool.nSelf) {
this.splice(i.end, 1);
this.splice(i.cur, 1);
//
i.end -= 2;
i.len -= 2;
}
}
}
正如你所看到的,這消除了在呼叫的冗餘,但它犧牲的方法,更重要的一些可讀性的機會,真的渺茫了使用簡單的比較,我上面提到的代碼。
所以現在我想知道是否有一些不太明顯的方式,我已經錯過了,這將允許我將我的數組的全部內容傳遞給局部變量,而不必先傳遞它們作爲參數它自己的方法。
任何想法?
爲什麼所有的本地對象?你有什麼反對原始的東西? – trincot
我認爲這有助於我保持組織。我以bool對象爲例。我的意思是當你檢查for循環條件區域時,看到變量bool附在變量上,它使得我更容易看到我腦海中發生了什麼。儘管我在學習,但我的實踐正在不斷轉變。 – Musixauce3000
「可以訪問我的數組的內容,而不必將它們作爲它自己的方法的參數傳遞給它們」 - 聽起來這個「*」恰恰是*剛剛描述的內容。我不清楚爲什麼你認爲它「降低了可讀性」。 'this'的意思是「將這個函數作爲一個方法調用時使用的對象」,所以就可讀性而言,這正是你想要做的事情,而這正是本文要表達的意思。我還第二個想法是,使用'i'和'bool'變量來不必要地「命名空間」你的本地變量是相當混亂和損害你的代碼的可讀性。 – apsillers