【问题标题】:Return value from map or other way从地图或其他方式返回值
【发布时间】:2018-01-13 11:10:46
【问题描述】:

我需要从数组中获取匹配项,但我找不到更好的方法。 我感谢您的帮助。 我有一个数组:

sqlConditions: ['!=', '<>', '<=', '>=', '!<', '!>', '>', '<', '=', '%', 'LIKE', 'IS NOT NULL', 'IS NULL', 'BETWEEN', 'IN']

我正在这样做:

hascondition = quadConfig.sqlConditions.map(function (condition) {
        if (fieldValue.indexOf(condition, 0) === 0) {
            hascondition = condition;
            fieldValue = fieldValue.replace(hascondition, '');
            return hascondition;
        } else if (fieldValue.indexOf(condition, 0) > 0) {
            console.log("condição mal formada, etc...");

        } else if (fieldValue.indexOf(condition, 0) === -1) {
            console.log("condição mal formada, etc...");
        }
        if (fieldValue.indexOf(condition.toLowerCase(), 0) === 0) {
            hascondition = condition.toUpperCase();
            fieldValue = fieldValue.replace(condition.toLowerCase(), '')
            return hascondition;
        } else if (fieldValue.indexOf(condition.toLowerCase(), 0) > 0) {
            console.log("condição mal formada, etc...");

        } else if (fieldValue.indexOf(condition.toLowerCase(), 0) === -1) {
            console.log("condição mal formada, etc...");
        }
    });

但我只需要值 hascondition 而不是数组。有没有办法打破地图或只返回匹配的条件?

【问题讨论】:

  • 请同时添加缺少的变量。
  • fieldValue="like xin"

标签: javascript dictionary return lodash cycle


【解决方案1】:

你是这个意思吗?

let hasCondition = quadConfig.sqlConditions.some(c=>fieldValue.toUpperCase().indexOf(c)!==-1);

【讨论】:

    【解决方案2】:

    您可以使用 sqlConditions 数组转换为 RegExp 模式 不区分大小写的标志 (i)。然后使用RegExp#exec 将其应用于语句。如果没有找到,结果将为null。如果找到结果你可以得到index,并检查它是否为0。如果在索引0处没有找到结果返回null,否则返回result[0](结果是一个数组)。

    function findCond(statement) {
      var sqlConditions = ['!=', '<>', '<=', '>=', '!<', '!>', '>', '<', '=', '%', 'LIKE', 'IS NOT NULL', 'IS NULL', 'BETWEEN', 'IN'];
      
      var pattern = new RegExp('\b' + sqlConditions.join('|') + '\b', 'i');
      
      var result = pattern.exec(statement);
      
      if(!result || result.index !== 0) {
        console.log("condição mal formada, etc...");
        return null;
      }
                
      return result[0];
    }
    
    console.log(findCond('<> 3'));
    
    console.log(findCond('between something'));
    
    console.log(findCond('xxxx between something'));
    
    console.log(findCond('cats'));

    【讨论】:

      猜你喜欢
      • 2021-04-02
      • 1970-01-01
      • 2014-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-30
      • 1970-01-01
      相关资源
      最近更新 更多