Извините, я не знаю, как сделать более описательный заголовок.Я пытаюсь отсортировать массив ниже:
var joins = [
{
"joinType": "INNER JOIN",
"joinTableName": "country",
"joinColumnName": "id",
"foreignTableName": "state",
"foreignColumnName": "country_id",
"index": 1
},
{
"joinType": "INNER JOIN",
"joinTableName": "state",
"joinColumnName": "id",
"foreignTableName": "city",
"foreignColumnName": "state_id",
"index": 2
},
{
"joinType": "INNER JOIN",
"joinTableName": "city",
"joinColumnName": "id",
"foreignTableName": "address",
"foreignColumnName": "city_id",
"index": 3
},
{
"joinType": "INNER JOIN",
"joinTableName": "address",
"joinColumnName": "id",
"foreignTableName": "user",
"foreignColumnName": "address_id",
"index": 4
},
{
"joinType": "INNER JOIN",
"joinTableName": "user_status",
"joinColumnName": "id",
"foreignTableName": "user",
"foreignColumnName": "status_id",
"index": 5
}
]
с помощью кода ниже:
joins.sort((a, b) => {
if (a.foreignTableName === b.joinTableName) return 1; //b comes first
else if (a.joinTableName === b.foreignTableName) return -1; //a comes first
else return 0; //no change
});
Результат:
[
{
"joinType": "INNER JOIN",
"joinTableName": "state",
"joinColumnName": "id",
"foreignTableName": "city",
"foreignColumnName": "state_id",
"index": 2
},
{
"joinType": "INNER JOIN",
"joinTableName": "country",
"joinColumnName": "id",
"foreignTableName": "state",
"foreignColumnName": "country_id",
"index": 1
},
{
"joinType": "INNER JOIN",
"joinTableName": "address",
"joinColumnName": "id",
"foreignTableName": "user",
"foreignColumnName": "address_id",
"index": 4
},
{
"joinType": "INNER JOIN",
"joinTableName": "city",
"joinColumnName": "id",
"foreignTableName": "address",
"foreignColumnName": "city_id",
"index": 3
},
{
"joinType": "INNER JOIN",
"joinTableName": "user_status",
"joinColumnName": "id",
"foreignTableName": "user",
"foreignColumnName": "status_id",
"index": 5
}
]
Это не то, что яожидается - я ожидаю, что элементы с индексами 2 и 1 идут после элемента с индексом 3. Что не так?
Чтобы добавить еще некоторые детали, это для создания оператора запроса MySql из определения поля объектатаблица, которая определяет поля бизнес-объекта с использованием данных из базы данных нижнего уровня другой производственной системы.Вышеуказанная часть предназначена для создания подпункта JOIN
.
PS, вот что я хочу:
[
{
"joinType": "INNER JOIN",
"joinTableName": "address",
"joinColumnName": "id",
"foreignTableName": "user",
"foreignColumnName": "address_id",
"index": 4
},
{
"joinType": "INNER JOIN",
"joinTableName": "city",
"joinColumnName": "id",
"foreignTableName": "address",
"foreignColumnName": "city_id",
"index": 3
},
{
"joinType": "INNER JOIN",
"joinTableName": "state",
"joinColumnName": "id",
"foreignTableName": "city",
"foreignColumnName": "state_id",
"index": 2
},
{
"joinType": "INNER JOIN",
"joinTableName": "country",
"joinColumnName": "id",
"foreignTableName": "state",
"foreignColumnName": "country_id",
"index": 1
},
{
"joinType": "INNER JOIN",
"joinTableName": "user_status",
"joinColumnName": "id",
"foreignTableName": "user",
"foreignColumnName": "status_id",
"index": 5
}
]