У меня есть 2 массива строк с номерами, разделенными точками
Input1 = [ 'Companies.2', 'Desks.1.1', 'Chairs.1' ]
Input2 = [ 'Assets.2', 'Employees.1' ]
на input2 я попытался удалить (.) и отсортировать, но это не сработало
var arr = ['Assets.2', 'Employees.1']
var dots = /\./;
var test = []
for (var i = 0; i < arr.length; i++) {
if (arr[i].match(dots)) {
test.push(arr[i].replace(dots, ""))
}
}
console.info(test.sort());
Я пробовал использовать .sort (), но он работает только со строками.
Мой желаемый
output1 - это ['Chairs.1', 'Companies.2', 'Desks.1.1']
а output2 - ['Employees.1', 'Assets.2']
Но эти строки находятся, не так ли? Также не совсем ясно, каковы критерии сортировки, и нужно ли вам одинаковую сортировку для обоих входных массивов. Даже с удаленными точками Assets2 идет раньше Employees1?
@Bergi да, если я удалил точки, сначала будет Assets2, чего я не хочу
Тогда какой делать ты хочешь? Как должна работать ваша сортировка? На этом одном примере ввода, который вы указали, input2.reverse() выполнит работу, чтобы получить ожидаемый результат, но я сомневаюсь, что это то, что вы ищете.
@MohamedKhalifa Добро пожаловать в SO! Проблема в том, что Зачем не очевидно, что вы хотите, чтобы Employees.1 был раньше Assets.2. Я мог предположить, что это потому, что ".1"<".2" имеет приоритет над "A"<"E", но тогда у output есть Desks.1.1, идущий перед Companies.2, что, кажется, противоречит этому. Пожалуйста, объясните здесь логику, которая дает вам результаты, которые вы показываете. Спасибо.
@Bergi Я хочу отсортировать по номеру после строки. input2.reverse () не будет работать с большим массивом
@ggorlen Моя логика здесь представляет собой часть древовидной структуры, где [Assets.2, Employees.1] принадлежит родительскому элементу в древовидной структуре.
Хорошо, это звучит довольно сложно. Не могли бы вы рассказать нам об этом подробнее, чтобы мы могли помочь вам в соответствии с логикой вашего приложения? Спасибо.
@ggorlen Итак, моя древовидная структура выглядит следующим образом: Компании. является родительским [Assets.2, Employees.1] и являются дочерними по отношению к компаниям. эти дети могут быть родителями и иметь детей, как у сотрудников.1, могут иметь активы.
@MohamedKhalifa Затем создайте правильную древовидную структуру, не используйте вызов sort



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Странно, но вот и все. Приношу свои извинения сообществу за название функции сортировки, но у меня не было ни вдохновения, ни желания найти что-то лучше.
Обновлено: Я только что понял, что этот фрагмент работает для примера, но не принимает во внимание каждый случай, это не должен быть принятый ответ. OP необходимо построить правильную древовидную структуру вместо того, чтобы полагаться на sort (), как сказал @bergi
Input1 = [ 'Companies.2', 'Desks.1.1', 'Chairs.1' ]
Input2 = [ 'Assets.2', 'Employees.1' ]
const sortByNumber = ( a , b ) => {
return Math.sign(a.split(/\.(.+)/)[1].replace(/\./g, "") - b.split(/\.(.+)/)[1].replace(/\./g, ""))
}
output1 = Input1.sort(sortByNumber)
output2 = Input2.sort(sortByNumber)
console.info(output1)
console.info(output2)спасибо за вашу помощь, но если я хочу, чтобы output1 был ["chairs.1", "Desks.1.1", "Companies.2"]
Покажите, пожалуйста, код, который вы пробовали