2014-09-27 47 views
0

我有以下相當詳細的條件,我試圖圍繞一個簡單的版本包裹我的頭,但我沒有得到任何地方。詳細的javascript條件搜索簡化

if(agent % $.settings.gridSize === 0 && value % $.settings.gridSize == 1){ 
    // Dud 
}else if(agent % $.settings.gridSize == 1 && value % $.settings.gridSize === 0){ 
    // Dud 
}else{ 
    freeCells.push(value); 
} 

有沒有一種方法,我可以用一個單一的if語句達到同樣的條件,而不是使用扔掉的if else

喜歡的東西:

if(!(a && b) && !(x && y)){ 
    // Do stuff 
} 
+0

什麼是Dud?兩次是同一件事嗎? – Bergi 2014-09-27 17:18:04

+0

您可以簡化爲'if((!!|| || b)&&(!x ||!y)'或者if(!(a && b || x && y))') – Bergi 2014-09-27 17:20:45

回答

2

是的,這是可能的,你(幾乎)自己回答了你的問題。

你可以做到以下幾點:

var gS = $.settings.gridSize; 

if(!(agent % gS === 0 && value % gS == 1) && !(agent % gS == 1 && value % gS === 0)) { 
    freeCells.push(value); 
} 
+1

哦,哈!好東西,你在變量聲明中留下模數,如果你刪除'agent%',很高興接受爲正確答案。 – 2014-09-27 17:22:56

+2

啊,我明白了。我修好了它。 – friedi 2014-09-27 17:24:54

1

取決於$ .settings.gridSize等可能的值,它可能是你正在尋找的是:

if (agent % $.settings.gridSize !== value % $.settings.gridSize) { 
    // Dud 
} else { 

這也使語義更加清晰:涉及agent的模應與涉及value的模塊「不同」(在0/1意義上)。

+0

我也認爲'$ .settings.gridSize'的唯一合理值是2.當你用這個幻數替換變量時,語義不會變得更清晰嗎? – Robert 2014-09-28 15:31:59

+0

@Robert不尋常的假設,那個變量可以是任何東西(高達512)。 torazaburo - 有趣的是,你可能是對的,我必須回去檢查一下,這不會是我第一次想到某件事情! – 2014-09-28 18:22:46

1
if (
    agent % $.settings.gridSize > 1 
    || 
    (agent + value) % $.settings.gridSize !== 1 
) { 
    freeCells.push(value); 
} 

我認爲這是很自我解釋。

編輯

好像它不是自我解釋實際。

我做了一些轉變的假設。

  1. // Dud意味着什麼都不做。
  2. $.settings.gridSize是一個正整數,此後稱爲gridSize
  3. agentvalue是非負整數。

對於value被推agent % gridSize,必須爲01。由於不存在負數或小數部分,這意味着與agent % gridSize <= 1相同。所以如果餘數大於1value被推送。

否則agent % gridSize01。而對於value不要推value % gridSize必須承擔各自的其他價值。總之這將意味着(agent + value) % gridSize === 1。所以如果不是1那麼value被推送。

+1

不是。你能解釋一下你用於轉換的語義和你忽略的邊緣情況嗎?我會特別感興趣的是你從哪裏得到'> 1'。 – Bergi 2014-09-27 18:51:44

+0

@Bergi當然。不知何故,我預計有人會變得可疑。我盡我所能解釋了這種轉變,但它比預期的要複雜一些。可悲的是我沒有什麼經驗。 – Robert 2014-09-28 01:42:09

+0

謝謝,我現在看到。 +1! – Bergi 2014-09-28 09:30:33