I'm trying to sort bellow array:
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
}
]
by using bellow code:
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
});
The result is:
[
{
"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
}
]
This is not what I expected -- I expect that the elements with indexies 2 and 1 come after the element with index 3. What is wrong?
To add some more details, this is for creating a MySql query statement from an object field definition table, which defines the fields of a business object by using data from the underlayer DB of another production system. The above part is for creating the JOIN subclause.
P.S., Here is what I want:
[
{
"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
}
]
foreignTableName.