这是检查3个元素中的1个是否具有值的等式。如果是,则所有元素都必须具有值:
request.form['amount']
答案 0 :(得分:4)
您可以使用模运算符,使其成为4个,5个或更多变量的解决方案 - 只需调整最终数字:
if ((!a+!b+!c)%3)
!
(一个布尔否定)使!a
成为一个布尔结果,基于空字符串是假的,而非空字符串是真的,所以你得到{{1}或者true
分别在这些情况下。
加法时,布尔值被强制为数字(0或1)。所以总和是0,1,2或3。
false
运算符在除以3之后给出余数,对于可能的值是原始值除了为3:在这种情况下结果是0.所以我们得到一个非零值,仅适用于我们要显示验证错误的情况。
在%
条件的上下文中,此值被强制为布尔值,而非零数值则是真实的。
如果您有一组输入,那么您可以使用与if
类似的模式:
filter
请注意// Assume arr = [a,b,c];
if ( arr.filter(Boolean).length%arr.length )
函数如何用于实质上与双重否定相同(实际上,如果我之前使用Boolean
而不是!!
,它将是相同的 - 现在它给出了相反的布尔值,但也可以。)
虽然这回答了你的问题,但你应该问自己,减少代码是否值得:可读代码比短代码更重要,当然,当执行时间不受其影响时。
答案 1 :(得分:1)
对于3个变量,这看起来似乎不会更短,但肯定是更多的数字:
let a = "test",
b = "",
c = "";
let arr = [a, b, c]
let filteredArr = arr.filter(item => item === '')
if (filteredArr.length > 0 && filteredArr.length < arr.length) {
alert('Please fill all elements');
}
答案 2 :(得分:1)
你可以做到
if([a,b,c].find(entry => entry == '').length && [a,b,c].find(entry => entry !== '').length) {
alert('Please fill all elements');
}
IMO也更具可读性,它首先检查是否为空,如果是,则检查是否有数据,如果两者都为真,则要求填写所有元素
答案 3 :(得分:1)
if(!( !!a === !!b && !!b === !!c))
应该这样做。基本上,如果所有三个条件同样真实或虚假,这将失败。
答案 4 :(得分:0)
所以,有些元素是空的,但并非所有元素都是空的?
<?php
Pjax::begin(['id' => 'product-manage']);
echo GridView::widget([
'dataProvider' => $productsProvider,
'filterModel' => $filterModel,
'filterPosition' => 'header',
'columns' => [
['class' => 'yii\grid\SerialColumn'],
....
['class' => 'yii\grid\ActionColumn',
'header' => 'Actions',
'buttons' => [
....
'toggle-publish' => function ($url, $model) {
$html = $model->published ? '<span class="glyphicon glyphicon-remove"></span>' : '<span class="glyphicon glyphicon-ok"></span>';
return Html::a($html, $url, [
'title' => $model->published ? 'Unpublish' : 'Publish',
'data-pjax' => 'product-manage',
'data' => [
'confirm' => $model->published ? 'Are you sure you want to unpublish ' . $model->inci . ' ?' : 'Are you sure you want to publish ' . $model->inci . ' ?',
'method' => 'post',
],
]);
},
],
'template' => '<span class="block text-center">{view}</span>
<span class="block text-center">{update}</span>
<span class="block text-center">{toggle-default-product}</span>
<span class="block text-center">{toggle-publish}</span>'
],
],
]);
Pjax::end();
?>
答案 5 :(得分:0)
为什么你不喜欢
if (a === "" || b === "" || c === ""){
alert('Please fill all elements');
}