所以我有一个看起来像这样的声明
subsetSumArray[i][j]=(subsetSumArray[i-1][j] || subsetSumArray[i-1][j-arr[i]]);
问题是当变量j小于arr [i]时,subsetSumArray [i-1] [j-arr [i]]将返回undefined。如果subsetSumArray未定义,我希望将其视为false。什么是最短的方式来做到这一点。 所以基本上我希望它像这样工作 (一些未定义的变量 || true)===>返回true
提前感谢您的帮助!
答案 0 :(得分: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 :(得分:-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