Сортировка массива Js в соответствии с заранее определенным массивом индексов

#javascript #arrays #sorting

Вопрос:

надеюсь, вы поможете мне это исправить.

Итак, у меня есть один массив с вложенными массивами:

 mainArr: [[Carl, 20, Male],[Mike, 30, Male], [Chloe, 45, Female], ...]  

Теперь этот массив необходимо отсортировать по другому массиву, содержащему заданный порядок индексов из приведенного выше массива.

 indexArr: [2,1,3,...]  

Результатом здесь является:

 sortedArr: [[Mike, 30, Male], [Carl, 20, Male], [Chloe, 45, Female], ...]  

Я подумал о том, чтобы написать цикл ForEach со вторым массивом, что-то вроде:

 indexArr.forEach(i){  sortedArr.push(mainArr[indexArr[i]]); };  

Но я стараюсь избегать использования циклов с этой функцией, чтобы она работала быстро. Я не смог найти ничего, относящегося к моей проблеме, ни в одной документации по массиву. Знаете ли вы способ эффективно заполнить sortedArr или отсортировать mainArr?

Комментарии:

1. Не думайте, что есть что-то быстрее, чем ваш цикл forEach

2. Вы не можете сделать это без перебора записей в массиве (будь то явный цикл for/foreach или неявный цикл, такой как map).

Ответ №1:

 indexArr.map(ind =gt; mainArr[ind - 1])  

Комментарии:

1. Идеально, надо было об этом подумать! Большое спасибо

2. хороший ответ с использованием цикла, который необходим

3. Каждое чтение с массивом позиций, например const item = mainArr[sortArr[index]] , будет иметь постоянное количество шагов ( O(1) сложность). Тем не менее, вам нужно будет пройти весь массив, чтобы собрать все элементы, действие, количество шагов которого увеличивается по мере увеличения количества элементов ( O(n) сложность, которую вы пытаетесь отменить). В этом смысле я не вижу выхода из цикла для получения всех необходимых вам элементов, независимо от используемого метода массива (например, это map не позволит избежать перебора элементов), без разницы в сложности — push или этот подход будет O(1).

4. Я понял, что ты прав, в этом нет никакого способа избежать петли. Это должно сработать!