2012-04-25 141 views
0

爲了找到多個用戶設置(布爾值)的「交集」,我需要將它們的設置對象與對方進行比較。例如:如果您點擊某個用戶,您會看到他的設置並可以對其進行編輯,但是如果您選擇了多個可以具有不同設置的用戶,我希望能夠顯示不確定狀態以顯示設置了特定設置對某些用戶來說是正確的,對其他用戶是錯誤的。在多重選擇的情況下,相同的設置將應用於所有選定的用戶。對象屬性比較

下面是我到目前爲止想到的一個例子,想知道是否有更優雅的方式來做到這一點(只要有至少兩個用戶使用不同的設置,那麼我可以忽略休息):http://jsfiddle.net/kT7UP/

在此先感謝。

回答

2

您可以將每個屬性測試轉換爲您傳遞屬性名稱的通用函數。因此,所有的重複for循環變成這樣:

function checkCommonValue(prop) { 
    for (var j = 0; j < userAll.length; j++) { 
     if (userAll[j][prop] != model[prop]) { 
      console.log('Indeterminate status'); 
      return(false); 
     } 
    } 
    return(true); 
} 

checkCommonValue("Printing"); 
checkCommonValue("Sharing"); 
checkCommonValue("Reading"); 
checkCommonValue("AccountEnabled"); 
checkCommonValue("Fax"); 

記住基本原理編碼DRY(不要重複自己)。如果您發現重複的代碼塊幾乎相同,那麼現在是時候想辦法將代碼分解成可從多個地方調用的常用函數,而不是將相同的代碼複製/粘貼到多個位置。

+0

非常感謝!我意識到我在重複太多,但卻想不起你的解決方案。這非常好,尤其是如果你需要比較更多的屬性。 你能否在你的例子中解釋錯誤假設?我通常使用「沒有偏見」的「迴歸真實」,並且好奇它們有什麼不同。 – Bay 2012-04-25 21:20:13

+0

在大多數情況下,您不需要圍繞返回值的偏好。有幾種情況(現在讓我逃脫了,但我認爲它與多個語句或多行語句有關),其中parens爲解釋器提供了所需的清晰度。我有使用它們的習慣,但通常不是必需的。 – jfriend00 2012-04-25 21:44:29

+0

好的,謝謝。 :) – Bay 2012-04-25 21:46:06