madrogalo
@madrogalo
Кратко о себе

Как отсортировать массив по массиву?

Есть массив:

["290", "999", "222", "333", "987", "309", "666"]

Нужно сделать сортировку по этому массиву:

["999", "222", "666"]

И на выходе получить:

["999", "222", "666", "290", "333", "987", "309"]
  • Вопрос задан
  • 80 просмотров
Решения вопроса 2
@asaiyo
let allElems = ["290", "999", "222", "333", "987", "309", "666"];
let pattern = ["999", "222", "666"];
let goodElems = []; 
let badElems = [];

for (let elem of allElems){
  pattern.includes(elem) ? goodElems.push(elem) : badElems.push(elem);
}

let filteredElems = goodElems.concat(badElems);
console.log(filteredElems);
Ответ написан
0xD34F
@0xD34F Куратор тега JavaScript
function sort(arr, order, key = x => x) {
  const sorted = new Map(order.map(n => [ n, [] ]));
  const unsorted = [];

  arr.forEach(n => (sorted.get(key(n)) ?? unsorted).push(n));

  return [].concat(...sorted.values(), unsorted);
}



a1 = [ '999', '290', '999', '222', '333', '987', '309', '666', '999' ];
a2 = [ '999', '222', '666' ];
sort(a1, a2) // [ '999', '999', '999', '222', '666', '290', '333', '987', '309' ]


a1 = [ 12, 34, 6, 2, 55, 523, 23, 333, 16, 51 ];
a2 = [ 3, 5, 2 ];
sort(a1, a2, x => +`${x}`[0]) // [ 34, 333, 55, 523, 51, 2, 23, 12, 6, 16 ]


a1 = [ 666, 'xxx', () => [], true, 1, () => null, false, 'aaa', [0] ];
a2 = [ 'boolean', 'string', 'function' ];
sort(a1, a2, x => typeof x) // [ true, false, 'xxx', 'aaa', () => [], () => null, 666, 1, [ 0 ] ]
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы