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的答案是相当不错的。 我主要是澄清,数组文字本身没有这种能力。