Сортировка массива строк с числами, разделенными точками

У меня есть 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']

Покажите, пожалуйста, код, который вы пробовали

Phil 30.03.2021 01:27

Но эти строки находятся, не так ли? Также не совсем ясно, каковы критерии сортировки, и нужно ли вам одинаковую сортировку для обоих входных массивов. Даже с удаленными точками Assets2 идет раньше Employees1?

Bergi 30.03.2021 01:27

@Bergi да, если я удалил точки, сначала будет Assets2, чего я не хочу

Mohamed Khalifa 30.03.2021 01:30

Тогда какой делать ты хочешь? Как должна работать ваша сортировка? На этом одном примере ввода, который вы указали, input2.reverse() выполнит работу, чтобы получить ожидаемый результат, но я сомневаюсь, что это то, что вы ищете.

Bergi 30.03.2021 01:33

@MohamedKhalifa Добро пожаловать в SO! Проблема в том, что Зачем не очевидно, что вы хотите, чтобы Employees.1 был раньше Assets.2. Я мог предположить, что это потому, что ".1"<".2" имеет приоритет над "A"<"E", но тогда у output есть Desks.1.1, идущий перед Companies.2, что, кажется, противоречит этому. Пожалуйста, объясните здесь логику, которая дает вам результаты, которые вы показываете. Спасибо.

ggorlen 30.03.2021 01:36

@Bergi Я хочу отсортировать по номеру после строки. input2.reverse () не будет работать с большим массивом

Mohamed Khalifa 30.03.2021 01:36

@ggorlen Моя логика здесь представляет собой часть древовидной структуры, где [Assets.2, Employees.1] принадлежит родительскому элементу в древовидной структуре.

Mohamed Khalifa 30.03.2021 01:40

Хорошо, это звучит довольно сложно. Не могли бы вы рассказать нам об этом подробнее, чтобы мы могли помочь вам в соответствии с логикой вашего приложения? Спасибо.

ggorlen 30.03.2021 01:41

@ggorlen Итак, моя древовидная структура выглядит следующим образом: Компании. является родительским [Assets.2, Employees.1] и являются дочерними по отношению к компаниям. эти дети могут быть родителями и иметь детей, как у сотрудников.1, могут иметь активы.

Mohamed Khalifa 30.03.2021 01:43

@MohamedKhalifa Затем создайте правильную древовидную структуру, не используйте вызов sort

Bergi 30.03.2021 03:48
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
10
36
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Странно, но вот и все. Приношу свои извинения сообществу за название функции сортировки, но у меня не было ни вдохновения, ни желания найти что-то лучше.

Обновлено: Я только что понял, что этот фрагмент работает для примера, но не принимает во внимание каждый случай, это не должен быть принятый ответ. 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"]

Mohamed Khalifa 30.03.2021 02:59

Другие вопросы по теме