使用下划线对值进行模糊搜索的返回键

时间:2018-07-26 14:24:18

标签: javascript underscore.js

我正在尝试返回给定值的近似匹配的键。 这是我的字典数据

const dict = {
    "key": "value",
    "nova": "nov",
    "euro": "eur"
}

使用下划线或原始js而不是循环遍历,是一种更简单的方法吗?基本上,如果输入字符串中有与“键”匹配的任何子字符串,则返回“值”。

示例

input: "nova_w2" output: "nov"
input: "nova_2323" output: "nov"
input: "novae" output: "nov"
input: "euro12" output: "eur"

2 个答案:

答案 0 :(得分:2)

如果您必须检查整个词典,那么您真的不能不循环执行此操作。 但这很简单。循环浏览字典。如果单词包含键,则返回值。

const dict = {
    "key": "value",
    "nova": "nov",
    "euro": "eur"
};
const lookup = word => {
  const match = Object.entries( dict ).find(([ key, value ]) => word.includes( key ));
  return match
    ? match[ 1 ]
    : false;
};
console.log( lookup( 'nova_w2' ));
console.log( lookup( 'nova_2323' ));
console.log( lookup( 'novae' ));
console.log( lookup( 'euro12' ));
console.log( lookup( 'thisShouldNotBeFound' ));

答案 1 :(得分:0)

我们可以使用Object.keys()在对象中搜索适当的键,然后使用find来找到匹配的键。

let key = Object.keys(dict).find(key => this.value.includes(key))

这是一个有效的示例:

const dict = {
  "key": "value",
  "nova": "nov",
  "euro": "eur"
}

const input = document.querySelector('input')
input.addEventListener('input', function() {
  let key = Object.keys(dict).find(key => this.value.includes(key))
  console.log(dict[key])
})
<input type="text">