Как я могу использовать sugar.js для поиска в массивах объектов?

У меня есть массив объектов. Каждый объект - это муниципалитет, с его названием, альтернативным написанием и идентификационным номером.

var munis = [
    {
        name: 'St. Louis Hills',
        alt: 'Saint Louis Hills',
        nhdNum: 992
    },
    {
        name: 'Mount Pleasant',
        alt: 'Mt. Pleasant',
        nhdNum: 1004
    }
];

В моем приложении пользователи могут ввести имя. Затем я использую Sugar.js для поиска в этом массиве и возврата конкретного объекта, который соответствует тому, что они ввели, например:

var theMatch = munis.find(function(el) { 
    return el.name === userInput || el.alt === userInput; 
});

Это хорошо работает, но позволяет мне использовать только одно каноническое имя и одно альтернативное написание. Я хотел бы иметь несколько альтернатив, как это:

{
    name: 'Mount Pleasant',
    alt: ['Mt. Pleasant','Mt Pleasant'],
    nhdNum: 1004
}

Но я не могу понять, как адаптировать Sugar.find() для поиска в этой структуре. Кто-нибудь может помочь?

2 ответа

Решение

Просто используйте Array::indexOf:

var theMatch = munis.find(function(el) { 
   return el.name === userInput ||
     el.alt.indexOf(userInput) > -1;
});

Вы можете использовать вложенную функцию поиска:

var theMatch = munis.find(function(el) { 
    return el.name === userInput || el.alt.find(userInput); 
});

Если вы используете indexOf, он вернет только индекс, но вернет объект, содержащий значение.

Другие вопросы по тегам