Size: a a a

2019 September 13

PM

Pavel 🦇 Malyshev in JSNN 🤔 (GSNN)
😉
источник

PM

Pavel 🦇 Malyshev in JSNN 🤔 (GSNN)
Мир, дружба, жвачка
источник

PM

Pavel 🦇 Malyshev in JSNN 🤔 (GSNN)
Vadim Ivanov
так это одно и то же)
🤔 с чего бы это?
источник

SS

Sergey Smyshlyaev in JSNN 🤔 (GSNN)
Andrey Makarov
одна партия, один народ, один then/catch!1
Один return из функции!
источник

PM

Pavel 🦇 Malyshev in JSNN 🤔 (GSNN)
Sergey Smyshlyaev
Один return из функции!
сразу видна старая школа)
источник

AM

Andrey Makarov in JSNN 🤔 (GSNN)
Pavel 🦇 Malyshev
сразу видна старая школа)
кстати, да :)
источник

SS

Sergey Smyshlyaev in JSNN 🤔 (GSNN)
источник
2019 September 14

AM

Andrey Makarov in JSNN 🤔 (GSNN)
источник

SS

Sergey Smyshlyaev in JSNN 🤔 (GSNN)
Не знал что CLI отдали в коммьюнити
источник
2019 September 17

DI

Dmitry Ivanov in JSNN 🤔 (GSNN)
Вопрос.

Есть массив объектов. Нужно его отсортировать по какой-то функции сравнения, но вдобавок  так чтобы какие-то элементы гарантированно всплыли наверх.
источник

DI

Dmitry Ivanov in JSNN 🤔 (GSNN)
ну например есть условия isFirst(elem): bool, isSecond(elem): bool и функция сравнения compare(a, b)
источник

NG

Nikita Glazov in JSNN 🤔 (GSNN)
Dmitry Ivanov
Вопрос.

Есть массив объектов. Нужно его отсортировать по какой-то функции сравнения, но вдобавок  так чтобы какие-то элементы гарантированно всплыли наверх.
А в чём вопрос?)
Решение в лоб: фильтруешь х раз массив
const firstElements = array.filter((item)=>item.isFirst)
const secondElements = array.filter((item)=>item.isSecond)
const elementsWithoutForcePosition = array.filter((item)=>!item.isFirst && !item.isSecond).sort((itemA, itemB)=>itemA.sortField-itemB.sortField)

return [...firstElements, ...secondElements, ...elementsWithoutForcePosition]

не оптимально по всем оптимизациям, но для такой задачи можно так сделать
источник

NG

Nikita Glazov in JSNN 🤔 (GSNN)
Лучше вместо isFirst сделать какое-то поле, типа priority в которое класть цифровое значение приоритета
источник

DI

Dmitry Ivanov in JSNN 🤔 (GSNN)
проблем нет, но такое решение слишком нечитабельное

про приоритет спасибо, хорошее решение
источник

NG

Nikita Glazov in JSNN 🤔 (GSNN)
Dmitry Ivanov
проблем нет, но такое решение слишком нечитабельное

про приоритет спасибо, хорошее решение
источник

NG

Nikita Glazov in JSNN 🤔 (GSNN)
Можно и так, будет в одной функции и оптимальнее
источник

DI

Dmitry Ivanov in JSNN 🤔 (GSNN)
это была первая мысль, но можно во-первых их 2 - козырных места, а во-вторых ли быть уверенным что каждый элемент попадет на место "а" ?
источник

NG

Nikita Glazov in JSNN 🤔 (GSNN)
Dmitry Ivanov
проблем нет, но такое решение слишком нечитабельное

про приоритет спасибо, хорошее решение
Или _.sortBy(array, ['prioriy', 'fieldName'])
источник

DI

Dmitry Ivanov in JSNN 🤔 (GSNN)
ага
источник

IM

Igor Molyarov in JSNN 🤔 (GSNN)
фана ради вариант
const a = [
   {isFirst: true, sortField: 5},
   { sortField: 1},
   {isSecond: true,sortField: 3},
   {isSecond: true,sortField: 2},
   {isFirst: true, sortField: 4},
];

const aSorted = a.sort((a, b)=> {
   if (firstCompare(a, b) !== null) {
       return firstCompare(a, b);
   }

   if (secondCompare(a, b) !== null) {
       return secondCompare(a, b)
   }

   return fieldCompare(a, b);
});

function firstCompare(a, b) {
   if (a.isFirst === b.isFirst && !a.isFirst) {
       return null;
   }

   if (a.isFirst !== b.isFirst) {
       return a.isFirst ? -1 : 1
   }
   return fieldCompare(a, b)

}
function secondCompare(a, b) {
   if (a.isSecond === b.isSecond && !a.isSecond) {
       return null;
   }
   if (a.isSecond !== b.isSecond) {
       return a.isSecond ? -1 : 1
   }
   return fieldCompare(a, b)
}
function fieldCompare(a, b){
   return a.sortField - b.sortField
}
источник