检查object.property的值是否为value1或value2

时间:2017-09-05 09:23:33

标签: javascript object ecmascript-6 lodash

我寻找一个解决方案来检查labelKey属性的值是to_be_rented还是to_be_put_on_sale

条件我们可以用:

if (this.project.currentProduct.productStatus.labelKey === ('to_be_rented' || 'to_be_put_on_sale')) {

}

但它不起作用,我也在寻找使用Lodash或es2015的更复杂的替代方案。

我该怎么做?

4 个答案:

答案 0 :(得分:2)

您的情况如下:

  1. 表达式to_be_rented ||的结果to_be_put_on_sale始终为to_be_rented
  2. 您将labelKey等于to_be_rented
  3. 正确的解决方案是将labelKey与两个字符串进行比较:

    let labelKey = this.project.currentProduct.productStatus.labelKey;
    if (labelKey === 'to_be_rented' || labelKey === 'to_be_put_on_sale')) {
       ...
    }
    

    使用ES2016可以简化:

    let values = ['to_be_rented', 'to_be_put_on_sale'];
    if (values.includes(this.project.currentProduct.productStatus.labelKey)) {
      ...
    }
    

答案 1 :(得分:1)

您可以将所有变体放入数组并使用Array.prototype.indexOf()(即使在ES5中也是如此):

const variants = ['to_be_rented', 'to_be_put_on_sale'];
const labelKey = this.project.currentProduct.productStatus.labelKey;
if (variants.indexOf(labelKey) !== -1) {
  ...
}

Array.prototype.includes()(ES2016中的内容):

if (variants.includes(labelKey)) {
  ...
}

如果您有两种以上的变体,这些方法会更方便。

对于您的案例Array.prototype.indexOf()Array.prototype.includes()将是相同的,但您可以查看这些函数之间的差异here

答案 2 :(得分:1)

您可以使用数组和Array#includes来检查数组中是否存在值。

const values = ['to_be_rented', 'to_be_put_on_sale'];
if (values.includes(this.project.currentProduct.productStatus.labelKey)) {
    // do something
}

答案 3 :(得分:0)

lodash方式:

var toFind = this.project.currentProduct.productStatus.labelKey;
if(_.find(['to_be_rented', 'to_be_put_on_sale'], toFind)) {
  // do something
}