Я получаю массив так:JavaScript - Как отсортировать массив массива по числовым строкам?
[
[{"name":"one","team":"------","checked":false,"position":"-"},
{"name":"two","team":"------","checked":false,"position":"1"}],
[{"name":"three","team":"------","checked":false,"position":"3"},
{"name":"four","team":"------","checked":false,"position":"7"}]
]
Я хочу, чтобы конечный результат будет так:
[
[{"name":"two","team":"------","checked":false,"position":"1"},
{"name":"four","team":"------","checked":false,"position":"7"}],
[{"name":"three","team":"------","checked":false,"position":"3"},
{"name":"one","team":"------","checked":false,"position":"-"}]
]
Это означает, что массив отсортирован по наибольшему значению положения и наименьшего значения позиции в первом вспомогательном массиве, затем второе наибольшее значение местоположения и второе значение наименьшей позиции во втором подматрице. Если есть позиция «-», она остается после номеров строк.
До сих пор я попытался это с lodash:
var mergedArray = vm.roundOf4[0].concat(vm.roundOf4[1]);
var count = _.countBy(mergedArray, {position: '-'});
var ascArray = _.cloneDeep(mergedArray);
var descArray = _.cloneDeep(mergedArray);
_.sortByOrder(ascArray, 'position', 'asc');
_.sortByOrder(descArray, 'position', 'desc');
_.times(count.true, ascArray.push(ascArray.shift()));
vm.roundOf4.some(function (array, i) {
array.some(function (object, j) {
if (j === 0) {
vm.roundOf4[i][j] = ascArray[i];
} else if (j === 1) {
vm.roundOf4[i][j] = descArray[i];
}
});
});
Но восходящая сортировать по функции не правильно сортировки значение позиции, так что это дает случайную сортировку. Я не знаю, является ли это потому, что позиция является строковым значением.
Должен ли я использовать цифры вместо этого?
'1' и' -' находились в одной и той же подрешетке, но в желаемом выходе они разделены. Какова логика этого? –
Нет логики, только «-» еще не установлен. Это может быть другое число, но поскольку оно еще не установлено, оно остается в конце, то же самое применимо к любому объекту. – forkfork
Не говоря о '-', я говорю о том, как' 1' и '-' были отделены друг от друга после сортировки! (** до: ** они находились в одном и том же поддиапазоне, ** после: ** каждый пошел в другую подматрицу)! То же самое для '7' и' 3'! –