Сортировать массив строк на основе массива чисел - PullRequest
2 голосов
/ 21 февраля 2020


Я пытаюсь выполнить следующую операцию: отсортировать массив строк на основе массива чисел одинаковой длины. Например:

A=[a,b,c,d,e]
B=[1,3,2,5,4]

A'=[a,c,b,e,d] //<=The desired outcome

По сути, я думаю о сортировке массива A на основе сортировки массива B в порядке возрастания. Здесь я думаю о неявных парах значений, как об объектах.

Я могу подумать о создании объекта, его сортировке и последующем выделении массива строк, но это, вероятно, слишком много кода, и мне интересно если есть более простой метод для достижения этой цели.
Любой совет будет приветствоваться. Большое спасибо!

Ответы [ 4 ]

5 голосов
/ 21 февраля 2020

Вам не нужно ничего сортировать здесь.
Просто используйте числа в качестве «позиций», откуда можно получить значение для текущего индекса / позиции в результате.

const input = ["a", "b", "c", "d", "e"];
const order = [1, 3, 2, 5, 4];

const result = order.map(position => input[position - 1]);

console.log(result);
1 голос
/ 21 февраля 2020

Немного кода гольф:

const A=['a','b','c','d','e'];
const B=[1,3,2,5,4];

// for this to work, we have to assume A and B have the same length
// if you implement this into a function, do such a check yourself first

const sorted = A.map((item, index, arr) => arr[B[index] - 1]);
console.log(sorted);

Это будет работать до тех пор, пока B не меньше, чем A, и если B заполнено числами

0 голосов
/ 21 февраля 2020

Если вы хотите иметь индивидуальный заказ, то вы можете создать объект с заказом:

let a = ['a', 'b', 'c', 'd', 'e'];
let b = [1, 3, 2, 5, 4];

let order = {a: 1, b: 3, c:2, d: 5, e:4};

const result =  a.sort((a, b) => order[a] - order[b]);
console.log(result);
0 голосов
/ 21 февраля 2020

Вы можете использовать a для l oop и добавить значение из A, получив индекс из B.

let A = ["a", "b", "c", "d", "e"];
let B = [1, 3, 2, 5, 4];
let C = [];

for (let i = 0; i < A.length; i++) C[B[i] - 1] = A[i];

console.log(C);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...