我有这样的数据:
dictionary: [
{ mercury: 'MERC' },
{ venus: 'VEN' },
{ earth: 'EART' },
{ mars: 'MAR' },
{ jupiter: 'JUP' },
{ saturn: 'SAT' },
{ uranus: 'ANUS' },
{ neptune: 'NEP' },
{ pluto: 'PLUT' },
]
当用户在输入字段(如v
)内输入字母时,我想显示对象中最接近的相似字符串,为此'VEN'
,我有以下代码:
let word = 'v'
let result = dictionary.find(d => {
var str = Object.keys(d)[0]
if (str.toLowerCase().indexOf(word.toLowerCase()) == 0) {
return result = str
}
})
此代码运行良好,结果返回找到的字符串。问题是当有人输入m
时,我只会获得MERC
,但我会得到多个结果,因为mercury
和mar
都以m
开头。
有没有办法用find或其他函数做到这一点?
答案 0 :(得分:4)
您可以过滤数组并仅使用值。
var dictionary = dictionary = [{ mercury: 'MERC' }, { venus: 'VEN' }, { earth: 'EART' }, { mars: 'MAR' }, { jupiter: 'JUP' }, { saturn: 'SAT' }, { uranus: 'ANUS' }, { neptune: 'NEP' }, { pluto: 'PLUT' }],
word = 'm',
result = dictionary
.filter(d => Object.keys(d)[0].toLowerCase().startsWith(word))
.map(o => Object.values(o)[0]);
console.log(result)
答案 1 :(得分:3)
find
只返回一个值。
使用Object.values
和filter
var search = "m";
search = search.toLowerCase();
var output = Object.values(dictionary).map(s => Object.values(s)[0].toLowerCase()).filter(s => s.indexOf(search) == 0);
console.log( output );
<强>演示强>
var dictionary = [{
mercury: 'MERC'
},
{
venus: 'VEN'
},
{
earth: 'EART'
},
{
mars: 'MAR'
},
{
jupiter: 'JUP'
},
{
saturn: 'SAT'
},
{
uranus: 'ANUS'
},
{
neptune: 'NEP'
},
{
pluto: 'PLUT'
},
];
var search = "m";
search = search.toLowerCase();
var output = Object.values(dictionary).map(s => Object.values(s)[0].toLowerCase()).filter(s => s.indexOf(search) == 0);
console.log( output );
修改强>
要返回原始案例,请在执行indexOf
var output = Object.values( dictionary ).map(
s => Object.values( s )[0] ).filter(
s => s.toLowerCase().indexOf( search ) == 0);
答案 2 :(得分:1)
使用函数filter
来获取目标。
var dictionary = [
{ mercury: 'MERC' },
{ venus: 'VEN' },
{ earth: 'EART' },
{ mars: 'MAR' },
{ jupiter: 'JUP' },
{ saturn: 'SAT' },
{ uranus: 'ANUS' },
{ neptune: 'NEP' },
{ pluto: 'PLUT' }
];
let word = 'm';
let result = dictionary.filter(d => Object.values(d)[0].toLowerCase().indexOf(word) > -1)
console.log(result)
如果您想要这些值,请使用map
函数。
var dictionary = [
{ mercury: 'MERC' },
{ venus: 'VEN' },
{ earth: 'EART' },
{ mars: 'MAR' },
{ jupiter: 'JUP' },
{ saturn: 'SAT' },
{ uranus: 'ANUS' },
{ neptune: 'NEP' },
{ pluto: 'PLUT' }
];
let word = 'm';
let result = dictionary.filter(d => Object.values(d)[0].toLowerCase().indexOf(word) > -1)
console.log(result.map((b) => Object.values(b)[0]))