我需要从数组中获得匹配,我看不到更好的方法。 我感谢您的帮助。 我有一个数组:
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
而不是数组。有没有办法打破地图或只返回匹配条件?
答案 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]
(结果是一个数组)。
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;