JavaScript:有条件地向数组添加内容的简写

我正在为工作中的服务器写摩卡testing。

我为客户收到两个潜在的电话号码,至less其中一个将被定义。

var homePhone = result.homePhone; var altPhone = result.altPhone; 

我想用下划线的_.sample函数随机select其中的一个。 但是,其中一个可能是未定义的。

所以我在想的是这样的:

//伪代码

 var phone = _.sample([homephone || (doNothing), altphone || (doNothing)]); 

_.sample函数如下所示: http ://underscorejs.org/#sample

当然,问题是没有简短的语法,我知道有条件地添加一些数组。

详细的做我想做的是:

 var phoneArray = []; if(homePhone){ phoneArray.push(homePhone); } if(altPhone){ phoneArray.push(homePhone); } var phoneSelection = _.sample(phoneArray); 

有没有更好的方法来做到这一点在JavaScript中?

既然你已经在使用下划线了,我会build议使用compact

 var phone = _.sample(_.compact([homephone, altphone])); 

这基本上是dave的答案的缩短版本,因为compact实际上是作为function(array) { return _.filter(array, _.identity); }实现的function(array) { return _.filter(array, _.identity); } function(array) { return _.filter(array, _.identity); }

你可以使用.filter

 _.sample([homephone, altphone].filter(_.identity)) 

另一种方法是:

 _.sample([homephone, altphone]) || homephone || altphone; 

关于什么:

  var phone = (homephone && altphone)? _.sample([homephone, altphone]) : (homephone || altphone); 

JavaScript中的数组文字:

 [ 1, 2, 3 ] 

…是一种静态声明哪些事情在数组的哪个位置进行的方法。 换句话说,当你编写代码时,你已经知道事情将会发生什么。

在你的情况下,职位只是dynamic的。 换句话说,直到你在一个给定的input集上运行程序,你才会知道他们将要去哪里。

所以基本上你所要求的是不可能的,除非在未来的JS版本中数组文字的工作方式发生根本的变化。 但是,如果你只想保存input,@dave的答案是相当不错的。 我主要是澄清,数组文字本身没有这种能力。