 
  
  $reviewsGroupedNumbers и прогоняем масcив из .csv используя в качестве ключа для объекта номер, пример:[+7 (111) 111-11-11, +7 (111) 111-11-11, +7 (111) 111-11-11].forEach(function( item ) {
    if( !$reviewsGroupedNumbers[ item ] ) {
        $reviewsGroupedNumbers[ item ] = [];
    }
    $reviewsGroupedNumbers[ item ].push({
        countNumber: '...',
        technicType: '...',
        rating: '...'
    });
});$reviewsGroupedNumbers[ '+7 (111) 111-11-11' ].length; 
  
  const found = Object.keys(obj).filter(n => n.toLowerCase().includes(search));
const SHOW = 2;
const button = document.querySelector('button');
const out = document.querySelector('#out');
button.addEventListener('click', showFound);
showFound();
function showFound() {
  out.insertAdjacentHTML('beforeend', found
    .splice(0, SHOW)
    .map(n => `<div>${n}</div>`)
    .join('')
  );
  button.disabled = !found.length;
}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>')
  );
});!!~ перед indexOf(..) приводит к true/false найдено/не найдено. Всё, кроме -1 даёт true.      const technics =[
  {
    name: "Автовышка"
  },
  {
    name: 'Эксковатор Погрузчик'
  }
];
// ПОИСК
const product = technics.find(item => item.name === "Автовышка");$('.parent') // берем родительские блоки
  .on('mouseenter', '[data-id]', event=>{ // вешаем обработчики на дочерние
    let id = $(event.target).data('id'); // узнаем id
    $(event.target).closest('.parent') // поднимаемся до своего родителя
      .siblings('.parent') // переходим к соседу
      .find('[data-id='+id+']') // берем в нем нужный дочерний
     //... что-то с ним делаем
;
  })$('.parent').eq(0) // берем родительские блоки - только первый$({ myProp: A }) // начальное значение A
  .animate(
    { myProp: B }, // целевое конечное значение B
    { // всякие опции анимации: время, функция на каждый шаг и т.п.
      step: function(now, tween) {  } // эта будет вызываться на каждом шаге анимации
    }
  );const $price = $("#banner-message > p > span");
$("button").on("click", function(){
  const oldPrice = parseInt($price.text());
  const newPrice = Math.round(500 + Math.random() * 4500);
  $({price:oldPrice}).animate({price:newPrice}, {
    step: (now, tween) => $price.text(Math.round(tween.elem.price))
  });
});<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512"><circle fill="#064687" cx="256" cy="256" r="248"/><path fill="#fff" d="M389.7 224h-182.6l75.5-72.4c9.7-9.3 9.9-24.8.4-34.3l-11-10.9c-9.4-9.4-24.6-9.4-33.9 0l-132.7 132.6c-9.4 9.4-9.4 24.6 0 33.9l132.7 132.7c9.4 9.4 24.6 9.4 33.9 0l11-10.9c9.5-9.5 9.3-25-.4-34.3l-75.5-72.4h182.6c13.3 0 24-10.7 24-24v-16c0-13.3-10.7-24-24-24z"/></svg>var elements = document.getElementsByClassName('my-class');
Array.prototype.forEach.call(elements, function(element) {
  emement.addEventListener('click', function(e) { /* ... */ });
});var elements = document.getElementsByClassName('my-class');
for (var i = 0; i < emements.length; i++) {
  elements[i].addEventListener('click', function(e) { /* ... */ });
}const elements = document.getElementsByClassName('my-class');
for (let element of elements) {
  emement.addEventListener('click', e => { /* ... */ });
}