如何遍历javascript对象以查找多个类似的键

时间:2018-02-15 13:14:04

标签: javascript arrays

我有这样的数据:

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,但我会得到多个结果,因为mercurymar都以m开头。

有没有办法用find或其他函数做到这一点?

3 个答案:

答案 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.valuesfilter

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

之前使用toLowerCase
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]))