2015-06-13 42 views
0

所以我有一個看起來像這樣的Javascript評估不確定的表達式或語句

subsetSumArray[i][j]=(subsetSumArray[i-1][j] || subsetSumArray[i-1][j-arr[i]]); 

問題的聲明時,當變量j小於改編[I],subsetSumArray [I-1] [J- arr [i]]將返回undefined。如果subsetSumArray未定義,我希望它被視爲false。什麼是最短的方式來做到這一點。 所以基本上我希望它這樣
一些不確定的變量 ||真)工作===>提前返回true

感謝您的幫助!

+1

至少在瀏覽器,(未定義|| true) - > true,因爲undefined自然是falsey。 – Sinkingpoint

+0

'subsetSumArray [i] [j] = subsetSumArray [i-1] [j] || subsetSumArray [i-1] [j-arr [i]] || false;' –

回答

1

最短的方法是做一個雙重否定!!)特技:

subsetSumArray[i][j]=!!(subsetSumArray[i-1][j] || subsetSumArray[i-1][j-arr[i]]); 

參見下面的代碼並運行它:

// empty array 
 
var a = []; 
 
// var[1] is undefined 
 
alert(a[1]);    // undefined 
 
alert(!! a[1]);    // false 
 
alert(a[1] || true);   // true 
 
alert(a[1] || a[2]);  // undefined 
 
alert(!! (a[1] || a[2])); // false

-1

問題是,||不變量的工作,沒有定義或未經申報,所以你必須使用typeof不是你的情況雖然但同樣,如果變量沒有定義。

subsetSumArray[i][j] = (typeof subsetSumArray[i-1][j] !== 'undefined' ? subsetSumArray[i-1][j] : subsetSumArray[i-1][j - arr[i]]); 

這就是說,速記是這樣的情況是不可讀:

if (typeof subsetSumArray[i-1][j] !== 'undefined') 
    subsetSumArray[i][j] = subsetSumArray[i - 1][j]; 
else 
    subsetSumArray[i][j] = subsetSumArray[i-1][j - arr[i]]; 

這是有效的,一個更容易理解到底是怎麼回事。你甚至可以刪除換行符


如果你從來沒有提到一個變量或沒有定義它,你將需要使用typeof

function foo (o) { 
    var baz = o.bar || 'hello'; 
    return baz; 
} 
foo(); // throws error 
+0

@ PM77-1它的工作原理可能不是最短的方式,但它解決了問題 – Downgoat

+1

最上面的說法是錯誤的。使用具有未定義值的'||'沒有任何問題。有用。 –

+0

@ PM77-1它不能與未定義的語句一起工作,因此您將其作爲虛假陳述。它'如此負面的堆棧溢出是多麼討厭, – Downgoat