给出一个对象,我想获取与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**
}
谢谢。
答案 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比赛很有用,但对于真正的编程来说却没有用,因为在编程中,清晰度很重要。