javascript - 通过映射的字母在不同的字母中搜索
问题描述
我有一个简单的搜索字段,我只能使用英文字母和数字进行搜索,我的目标是使搜索能够通过映射字母使用英文字母搜索不同的字母表,例如 a = α,b = μπ,g = γ等
我试图用两种语言的所有字母制作一个对象,并在使用它过滤我的数据之前过滤每个字母。
export function dataSearch(data, query) {
if (!data || data.length === 0) return [];
// if (/^[a-zA-Z]+$/.test(query)) detected English language
const lettersObj = [{a: 'α'}, {b: 'μπ'}, {g: 'γ'}]
const newQuery = lettersObj.filter((l) =>
Object.keys(l).join('').toLowerCase().match(query.toLowerCase())
return data.filter((d) => {
const dataString = Object.values(d).join('').toLowerCase();
return dataString.match(newQuery.toLowerCase());
});
}
预期的结果是能够在这两种情况下使用 en 字母进行搜索。如果我通过映射的字母输入了非 en 的内容,我应该得到相同的结果。
解决方案
您可以只使用一个对象,然后逐字母转换单词。然后,您可以使用 can continue Object.values
,但首先检查属性是否为 a string
,然后使用some
andincludes
检查每个属性是否包含该新单词:
const map = {a: 'α', b: 'μπ', g: 'γ'}
const data = [
{id: 4, date: '30/08/2019', name: 'Χτένισμα', notes: null, pos: true, price: 12}
]
const search = (data, s) => {
if (!data || data.length === 0) return [];
const query = s.split('').map(l => map[l] || l).join('')
return data.filter(d => Object.values(d).some(s => typeof s === "string" && s.includes(query)))
}
// Pass
console.log(search(data, 'a'))
console.log(search(data, '30/08'))
// Fail
console.log(search(data, 'null'))
console.log(search(data, '12'))
console.log(search(data, 'true'))
推荐阅读
- python - Pandas DataFrame 中的布尔值在应用函数乘以数字时转换为整数
- android - 使形状的背景部分与进度部分相反
- c# - 来自 Visucam/Clarus 眼科软件和 RGB 光度解释的 DICOM 图像显示为蓝色
- c# - 如何“移动”用于控制位置的双动画?
- wpf - 按钮不应缩放 Dpi 的依赖关系
- java - 如何获取 Google 返回的 JSON 对象中的持续时间和距离?
- r - 有没有办法在 R 的三元图上使用不重叠的数据点标签?
- kotlin - 如果让 Kotlin 相当于 swift?- 对于类变量?
- node.js - 有没有办法在树莓派 2 中将 mongodb 从 2.4 更新到 2.6?
- scala - Spark:udf 从路径获取目录名