将查询字符串"price>50,rating>4.5"
转换成Json格式{ price: { '$lt': 60 }, rating: { '$gt': 4 } }
const numericFilters = "price>50,rating>4.5";
const query = {};
if (numericFilters) {
const operatorMap = {
'>': '$gt',
'>=': '$gte',
'=': '$eq',
'<': '$lt',
'<=': '$lte',
};
const regEx = /\b(<|>|>=|=|<|<=)\b/g;
let filters = numericFilters.replace(
regEx,
(match) => `-${operatorMap[match]}-`
);
const options = ['price', 'rating'];
filters = filters.split(',').forEach((item) => {
const [field, operator, value] = item.split('-');
if (options.includes(field)) {
query[field] = { [operator]: Number(value) };
}
});
}
用到Javascript的replace()
方法和forEach()
方法。
replace()
方法返回一个由替换值(replacement
)替换部分或所有的模式(pattern
)匹配项后的新字符串。模式可以是一个字符串或者一个正则表达式,替换值可以是一个字符串或者一个每次匹配都要调用的回调函数。如果pattern
是字符串,则仅替换第一个匹配项。
指定一个函数作为第二个参数的情况下,当匹配执行后,该函数就会执行。 函数的返回值作为替换字符串。另外要注意的是,如果第一个参数是正则表达式,并且其为全局匹配模式,那么这个方法将被多次调用,每次匹配都会被调用。
发表回复