1Sergey1
@1Sergey1

Поиск по объекту js?

Добрый день, как лучше организовать работу поиска, есть объект с машинами и когда начинают вводить в строку поиска название машины мне её нужно вывести.
const technics = {
  'Автовышка' : {
    "name" : "secret"
  },
  'Эксковатор Погрузчик' : {
    "name" : "secret"
  },
}

Всё просто если название одно слово напр. Автовышка
technics["Автовышка"] = { }
Но как организовать поиск если в названии 2 слова и вводят например второе Эксковатор Погрузчик => вводят "погрузчик"
Стоит ли поменять структуру объекта или из многосоставных ключей делать массивы при поиске и перебирать массив или есть более адекватный способ?
Заранее спасибо
  • Вопрос задан
  • 3939 просмотров
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
Надо перебирать ключи, сравнивая с введенной строкой (все, приведенное в нижний регистр). Если подстрока находится в названии – включать объект в массив найденных.
Код
const $out = $('#suggest');
const $in = $('#in-search');

const technics = {
  'Автовышка' : {
    "name" : "secret"
  },
  'Эксковатор Погрузчик' : {
    "name" : "secret"
  },
}

$in.on('input', function(){
  const v = $(this).val().toLowerCase();
  if(v.length < 3) {
    $out.html('');
    return;
  }
  const matches = [];
  for(let title in technics) {
    if(!!~title.toLowerCase().indexOf(v))
      matches.push( title );
  }
  $out.html(
    matches
      .map(t=>t + ': ' +technics[t].name)
      .join('<br>')
  );
});
Рабочий пример

p.s. короткая запись !!~ перед indexOf(..) приводит к true/false найдено/не найдено. Всё, кроме -1 даёт true.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@rusglov
const technics =[
  {
    name: "Автовышка"
  },
  {
    name: 'Эксковатор Погрузчик'
  }
];

// ПОИСК

const product = technics.find(item => item.name === "Автовышка");
Ответ написан
@chibitko
Либо двоичный поиск, либо дерево поиска, например, красно-чёрное, но это если нужно пополнять коллекцию
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
24 нояб. 2024, в 23:46
20000 руб./за проект
24 нояб. 2024, в 23:07
2000 руб./за проект