如果另一个变量存在,只在if语句中包含一个变量?

时间:2015-09-22 18:01:35

标签: javascript

以下函数用于检查自定义日期窗口小部件(javascript)是否为空。问题是,这个小部件有许多变化,其中显示M / D / Y字段,或者它可以是M / D或M / Y.

当然,我可以对所有组合进行硬编码,就好像检查一样,但是有更好的方法可以说"有3个可能的节点,可能有值......如果存在3个节点中的x个AND他们都有价值观,空虚为假。"

checkIfEmpty: function () {
    var empty = true;

    var mNode = this.getNode('month');
    var month = mNode ? mNode.value : null;

    var dNode = this.getNode('day');
    var day = dNode ? dNode.value : null;

    var yNode = this.getNode('year');
    var year = yNode ? yNode.value : null;

    if (month && day && year) {
        empty = false;
    }

    return empty;
}

4 个答案:

答案 0 :(得分:1)

checkIfEmpty: function () {
    var empty = true;
    var dateParts = [];
    var mNode = this.getNode('month');
    if(mNode && mNode.value){
        dateParts.push('month');
    }

    var dNode = this.getNode('day');
    if(dNode && dNode.value){
        dateParts.push('day');
    }


    var yNode = this.getNode('year');
    if(yNode && yNode.value){
        dateParts.push('year');
    }

    if (dateParts.length) {
        empty = false;
    }

    return empty;
}

答案 1 :(得分:0)

您可以添加以查看节点是否不存在

if ( (!mNode || month) && (!dNode || day) && (!yNode || year) ) {

答案 2 :(得分:0)

如果所有有效节点都存在value属性,则:

if(mNode && dNode && yNode){
   empty = false;
}

否则:

if(mNode && mNode.value && dNode && dNode.value && yNode && yNode.value){
   empty = false;
}

我不确定我是否跟随,但是如果你需要至少有一个是真的那么空是假的那么:

if(mNode || dNode || yNode) {
   empty = false;
}

同样,如果value属性不是所有节点的标准属性:

if((mNode && mNode.value) || (dNode && dNode.value) || (yNode && yNode.value)){
   empty = false;
}

如果你这样想的话我觉得更清楚:

如果(node && node.value)返回truthy值,则date属性存在,否则date属性不存在。

答案 3 :(得分:0)

checkIfEmpty: function () {
    var empty = false;

    var mNode = this.getNode('month');
    if(mNode && !mNode.value) {
        empty = true;
    }

    var dNode = this.getNode('day');
    if(dNode && !dNode.value) {
        empty = true;
    }

    var yNode = this.getNode('year');
    if(yNode && !yNode.value) {
        empty = true;
    }

    return empty;
}

试图解决我自己的问题 - 到目前为止,这是实现我想要做的事情的最有效方式。任何人,关于如何提高效率的建议?