2012-11-05 13 views
1

我不知道是否可以簡化,並使用較少的代碼行用於此目的:方法來簡化對象的數組被重複幾次

我稱「工人」的一類,以及類有一個方法它從一系列簡單的數組中讀取屬性(名稱,年齡等)。

直到那裏,一切都很好。現在,我想添加的其中一個屬性是一個布爾值,它引用了該工作人員活動的年份中的哪個月份。就目前而言,我已經解決了這樣的:

var months_worker_1 = [{"jan":true},{"feb":true},{"mar":true},{"apr":false}] //and so on 

,然後我的財產讀取months_worker_1,但我有一個數組一樣,每個工人。我想知道是否有辦法做到這一點,需要更少的代碼行,例如,在一年中的所有月份創建一個「master」數組,並在每個worker的數組中,指定他們正在工作的月份。這些月份變得「真實」,剩下的幾個月自動變成「假」,沒有詳細說明......我一直在撓頭,目前只有我目前的系統工作正常,但我猜測必須有一個更簡單的方法...

非常感謝!

編輯:我澄清,沒有「大圖片」。我只是在做一些練習,試圖學習JavaScript,這一個喚醒了我的興趣,因爲我認爲的解決方案似乎太複雜了(重複同一個數組多次)。沒有具體的目標,我需要實現,我只是在學習如何做到這一點。

+1

有很多方法,但你必須選擇最好的記住*大圖*。我們還沒有看到。 – Jon

+0

你說得對。我編輯了我的信息來解釋我的大局。 –

回答

1

我有時使用的一個非常好的技巧是使用二進制數來跟蹤固定數量的標誌並將其轉換爲小數以便存儲/ URL嵌入等。讓我們假設Mark,一個用戶,一年中的所有月份都是活躍的。考慮到二進制數,其中1表示「有效」和0不活躍,馬克的標誌是:

111111111111(12個月)

如果標誌僅會在一月,二月和十二月,他的標誌值被激活將是:

11000000001

察看馬克在一個特定的月份是活動是檢查是否對應於該月的指數在Mark的標誌性格1或一樣簡單。

這種技術在過去幫助我通過URL發送大量標誌的值,同時也保持URL合理短。當然,你可能不需要這個,但它是要知道一件很好的事:

從二進制轉換爲十進制很容易在JS:

parseInt(11000000001, 2).toString(10); // returns 1537 

和反向:

parseInt((1537).toString(2)); // returns 11000000001 

編輯

你可以很方便地使用數組做出來的月份數字:

var months_worker_1 = [1, 2, 3]; // this would mean that the user is active during january, february and march 
+0

這是一個非常好的主意。我將嘗試使一些示例現在可以使用它... –

+0

我將與數組版本一起使用;它更清晰和更具可擴展性(例如,您可以使用它從Date對象獲取信息或使用月份名稱和信息索引到自定義數組中)。 – jrajav

相關問題