ЯС: Цикл заставляет сортировку по возрастанию, как сохранить определенный порядок? - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть два цикла, один большой для всех таблиц и внутренний, меньший для выбранных таблиц (будет сгруппирован позже):

        var tables = data.tables;
        ar_1 = [29, 21, 19, 27, 28];

        for (var i = 12; i < tables.length; i++) {
            for( var j = 0; j < ar_1.length; j++) {
                if(ar_1[j] == tables[i][0]) {
                    div.append(
                        '<img src="xxx"><span>' + tables[i][1] + '</span>'
                    );
                }
            }

Оба цикла отлично работают, у меня проблема в том, что я хочу сохранить порядок, указанный во внутреннем массиве, и вывод всегда вызывает сортировку по возрастанию, поэтому результат равен 19, 21, 27, 28, 29.

Что я могу сделать, чтобы сохранить порядок результата, указанный в массиве?

1 Ответ

0 голосов
/ 07 сентября 2018

Попробуйте выполнить цикл по ar_1 во внешнем цикле:

for (var j = 0; j < ar_1.length; j++) {
  for (var i = 12; i < tables.length; i++) {
    if (ar_1[j] == tables[i][0]) {
      div.append(
        '<img src="xxx"><span>' + tables[i][1] + '</span>'
      );
    }
  }
}

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

ar_1.forEach((findNum) => {
  const foundTable = tables.find(([num]) => num === findNum);
  div.append(
    '<img src="xxx"><span>' + foundTable[1] + '</span>'
  )
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...