简体   繁体   English

如何最小化JavaScript中的if语句

[英]How to minimize the if statement in javascript

I have a very long if-conditional statement. 我有很长的if-condition语句。 How can I minimize it? 如何最小化? Here is my code, 这是我的代码,

if(this.refs.category.value.trim() != "" &&
        this.refs.decisive_min.value.trim() != "" && this.refs.decisive_max.value.trim() != "" &&
        this.refs.interactive_min.value.trim() != "" && this.refs.interactive_max.value.trim() != "" &&
        this.refs.stabilizing_min.value.trim() != "" && this.refs.stabilizing_max.value.trim() != "" &&
        this.refs.cautious_min.value.trim() != "" && this.refs.cautious_max.value.trim() != "" &&
        this.refs.aesthetic_min.value.trim() != "" && this.refs.aesthetic_max.value.trim() != "" &&
        this.refs.economic_min.value.trim() != "" && this.refs.economic_max.value.trim() != "" &&
        this.refs.individualistic_min.value.trim() != "" && this.refs.individualistic_max.value.trim() != "" &&
        this.refs.political_min.value.trim() != "" && this.refs.political_max.value.trim() != "" &&
        this.refs.altruist_min.value.trim() != "" && this.refs.altruist_max.value.trim() != "" &&
        this.refs.regulatory_min.value.trim() != "" && this.refs.regulatory_max.value.trim() != "" &&
        this.refs.theoretical_min.value.trim() != "" && this.refs.theoretical_max.value.trim() != ""){
        var data = {category:this.refs.category.value.trim()};
        data.decisive_min = this.refs.decisive_min.value.trim();
        data.decisive_max = this.refs.decisive_max.value.trim();
        data.interactive_min = this.refs.interactive_min.value.trim();
        data.interactive_max = this.refs.interactive_max.value.trim();
        data.stabilizing_min = this.refs.stabilizing_min.value.trim();
        data.stabilizing_max = this.refs.stabilizing_max.value.trim();
        data.cautious_min = this.refs.cautious_min.value.trim();
        data.cautious_max = this.refs.cautious_max.value.trim();
        data.aesthetic_min = this.refs.aesthetic_min.value.trim();
        data.aesthetic_max = this.refs.aesthetic_max.value.trim();
        data.economic_min = this.refs.economic_min.value.trim();
        data.economic_max = this.refs.economic_max.value.trim();
        data.individualistic_max = this.refs.individualistic_max.value.trim();
        data.individualistic_min = this.refs.individualistic_min.value.trim();
        data.political_min = this.refs.political_min.value.trim();
        data.political_max = this.refs.political_max.value.trim();
        data.altruist_min = this.refs.altruist_min.value.trim();
        data.altruist_max = this.refs.altruist_max.value.trim();
        data.regulatory_min = this.refs.regulatory_min.value.trim();
        data.regulatory_max = this.refs.regulatory_max.value.trim();
        data.theoretical_min = this.refs.theoretical_min.value.trim();
        data.theoretical_max = this.refs.theoretical_max.value.trim();

I just want to check all the values in the form if they are all not empty string. 我只想检查表单中的所有值,如果它们都不是空字符串。

I used refs by React JS in Meteor. 我在Meteor中使用了React JS的引用。

You could use an array with the wanted keys. 您可以使用带有所需键的数组。 Then take only one loop for assigning and checking. 然后只需要分配和检查一个循环。

If all values are truthy, data contains the trimmed values, otherwise it is undefined . 如果所有值均为真,则data包含调整后的值,否则为undefined

var keys = ['category', 'decisive_min', 'decisive_max', 'interactive_min', 'interactive_max', 'stabilizing_min', 'stabilizing_max', 'cautious_min', 'cautious_max', 'aesthetic_min', 'aesthetic_max', 'economic_min', 'economic_max', 'individualistic_min', 'individualistic_max', 'political_min', 'political_max', 'altruist_min', 'altruist_max', 'regulatory_min', 'regulatory_max', 'theoretical_min', 'theoretical_max'],
    data = {};

data = keys.every(function (k) {
    return data[k] = this.refs[k].value.trim();
}, this) && data || undefined;

Using ES2015, you can do something like that : 使用ES2015,您可以执行以下操作:

Inside your component 内部组件

const fields = getFields(this.refs);

if (checkFieldsNotEmpty(fields)) {
    const data = {category:this.refs.category.value.trim()};
    fields.forEach(field => {
      data[`${field.name}_min`] = field.valueMin;
      data[`${field.name}_max`] = field.valueMax;
    });
    // ...
}

Outside your component (can be static methods) 在组件外部(可以是静态方法)

const fieldNames = [
  'decisive',
  'interactive',
  'stabilizing',
  // ...
];

const getFields = refs => fieldNames.map(name => ({
    name,
    valueMin: refs[`${fieldName}_min`].value.trim(),
    valueMax: refs[`${fieldName}_max`].value.trim()
}));

const checkFieldsNotEmpty = fields => {
  for (let field of fields) {
    if (field.valueMin === '' || field.valueMax === '') {
          return false  
    }
  }
  return true;
};

Try using 尝试使用

for (var property in this.refs) {
    if (this.refs.hasOwnProperty(property)) {
        // perform a null check
        if(this.refs[property]){
             //perform operaion
             data[property] = this.refs[property].trim();
        }
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM