如何获取与指定条件匹配的if语句的元素

时间:2018-08-03 06:36:30

标签: javascript

给出一个对象,我想获取与if语句上的指定条件匹配的属性。有可能吗?

object = {...};

if(object.privativa > 0 || object.comunitaria > 0 || 
    object.antiocupa > 0 || object.trastero > 0 || object.cancela > 0 || 
    object.parking > 0 || object.mando > 0 || object.otros > 0 || 
    object.otros2 > 0 || object.otros3 > 0) {

    **FIRST PROPERTY MATCHED HERE**

}

谢谢。

2 个答案:

答案 0 :(得分:1)

最好使用一系列要搜索的属性名称,而不是一堆||条件。然后,您可以使用array.find()获取第一个与> 0之类的条件相匹配的地址:

// some object
let object = {
    privativa: 0,
    comunitaria: -2,
    antiocupa: 0,
    trastero: 0,
    cancela :1,
    parking:0,
    otros: 1,
    otros2: 0,
    otros3: 1
}

// keys in the order you want to search
let keys = ['privativa', 'comunitaria', 'antiocupa', 'trastero', 'cancela','parking' ,'otros' ,'otros', 'otros3']

// find the first that matches you condition
let k = keys.find(k => object[k] > 0)

console.log("property:", k, "value:", object[k])

// You can also get ALL the keys that match and pick the first one.
let ks = keys.filter(k => object[k] > 0)
console.log("All matching keys: ", ks)

答案 1 :(得分:0)

您可以通过将逗号表达式放在if中来实现:

let prop;
if ((prop = 'privativa', object[prop] > 0) ||
    (prop = 'comunitaria', object[prop] > 0) ||
    (prop = 'antiocupa', object[prop] > 0) ||
    ...
    ) {
    // prop contains the first matched property
}

这利用了||运算符的短路。当它得到第一个真实的表达式时,它将停止对表达式的求值。然后,逗号运算符计算其两个操作数,然后返回第二个操作数的值。

尽管这回答了问题,但实际上我不建议编写这样的代码。这可能会使代码的读者感到困惑,并且最好遍历数组或使用Mark Meyer的答案中的.find()。学习这样的事情对于Code Golf比赛很有用,但对于真正的编程来说却没有用,因为在编程中,清晰度很重要。