从地图或其他方式返回值

时间:2018-01-13 11:10:46

标签: javascript dictionary return lodash cycle

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

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而不是数组。有没有办法打破地图或只返回匹配条件?

2 个答案:

答案 0 :(得分:2)

你是说这个吗?

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

答案 1 :(得分:1)

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

&#13;
&#13;
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'));
&#13;
&#13;
&#13;