фильтруйте объекты, но возвращайте индекс, а не сам объект

#javascript #jquery #filter #filtering

Вопрос:

Я хотел бы отфильтровать объекты с назначенным определенным классом. Мне нужно их положение в индексе. вот мой код js:

 arr = $('table td').filter('.class', function() {
    return $(this).index()
});
console.log(arr);
 

это возвращает все tds с .class присвоенным классом. но я хотел бы знать их положение в индексе. как я могу этого достичь? Я также пытался выяснить это с помощью grep. там та же проблема.

Ответ №1:

Я думаю, что для этого можно было бы использовать общий метод итерации и передавать индекс в массив, когда такой элемент найден:

 const arr = [];
$('table td').each(function(i) {
  if (this.matches('.class')) {
    arr.push(i);
  }
});
 

Хотя нет необходимости в большой библиотеке, такой как jQuery, для чего-то такого тривиального:

 const arr = [];
const tds = document.querySelectorAll('table td');
for (let i = 0; i < tds.length; i  ) {
  if (tds[i].matches('.class')) {
    arr.push(i);
  }
}
 

Ответ №2:

Используется map() для возврата нового массива на основе значений, полученных из соответствующих элементов

 const arr = $('table td.class').map((i, el) => $(el).index()).get()

console.log(arr); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table>
  <tr>
    <td class="class"></td>
    <td></td>
    <td></td>
    <td class="class"></td>
    <td></td>
  </tr>

</table>