这段代码可以缩短吗?

时间:2018-02-25 09:57:53

标签: javascript if-statement

这是检查3个元素中的1个是否具有值的等式。如果是,则所有元素都必须具有值:

request.form['amount']

6 个答案:

答案 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');
}