0

I'm looking way to order data wich is coming from my JSON Provider:

[{"Username":"Mehmet","UserID":2,"OkeyTablePlayerChairNumber":1},
{"Username":null,"UserID":0,"OkeyTablePlayerChairNumber":2},
{"Username":"Erçin","UserID":1,"OkeyTablePlayerChairNumber":3},
{"Username":null,"UserID":0,"OkeyTablePlayerChairNumber":4},
{"Username":null,"UserID":0,"OkeyTablePlayerChairNumber":5},
{"Username":null,"UserID":0,"OkeyTablePlayerChairNumber":6},
{"Username":null,"UserID":0,"OkeyTablePlayerChairNumber":7},
{"Username":null,"UserID":0,"OkeyTablePlayerChairNumber":8},
{"Username":null,"UserID":0,"OkeyTablePlayerChairNumber":9}]

There is two more important thing for ordering:

  1. OkeyTablePlayerChairNumber
  2. By UserID First; let me explain:

I want to order them firstly by OkeyTableChairNumber; this is done by Server Side already. Data coming ordered by OkeyTablePlayerChairNumber ASC...

Now the bull, I would like to order them by UserID but; for example if I took UserID == 1 it should order them like: UserID == 1 field, will be come to first field. and upper objects will removed and added to end of the list...

For view:

UserID == 1

 [{"Username":"Erçin","UserID":1,"OkeyTablePlayerChairNumber":3},
 {"Username":null,"UserID":0,"OkeyTablePlayerChairNumber":4},
 {"Username":null,"UserID":0,"OkeyTablePlayerChairNumber":5},
 {"Username":null,"UserID":0,"OkeyTablePlayerChairNumber":6},
 {"Username":null,"UserID":0,"OkeyTablePlayerChairNumber":7},
 {"Username":null,"UserID":0,"OkeyTablePlayerChairNumber":8},
 {"Username":null,"UserID":0,"OkeyTablePlayerChairNumber":9},
 {"Username":"Mehmet","UserID":2,"OkeyTablePlayerChairNumber":1},
 {"Username":null,"UserID":0,"OkeyTablePlayerChairNumber":2}]

C# Solution I made before; But I need JS solutions:

int yourSitPositionIndex = playersOnTheTableWithEmpytPositions.ToList().FindIndex(x => x.UserID == userID);
var beforePlayers = playersOnTheTableWithEmpytPositions.ToList().GetRange(0, yourSitPositionIndex);
IEnumerable<tbl_Okey_TablePlayer> afterPlayers = playersOnTheTableWithEmpytPositions.Except(beforePlayers);
IEnumerable<tbl_Okey_TablePlayer> newPositions = afterPlayers.Concat(beforePlayers);
AstroCB
  • 12,337
  • 20
  • 57
  • 73
Erçin Dedeoğlu
  • 4,950
  • 4
  • 49
  • 69

2 Answers2

1

Conversion of your C# solution:

var wantedId = 1;

var index = 0, result;
//int yourSitPositionIndex = playersOnTheTableWithEmpytPositions.ToList().FindIndex(x => x.UserID == userID);
while (index < data.length && data[index].UserID != wantedId) index += 1;
if (index < data.length) {
    //var beforePlayers = playersOnTheTableWithEmpytPositions.ToList().GetRange(0, yourSitPositionIndex);
    var beforePlayers = data.slice(0, index);
    //IEnumerable<tbl_Okey_TablePlayer> afterPlayers = playersOnTheTableWithEmpytPositions.Except(beforePlayers);
    var afterPlayers = data.slice(index);
    //IEnumerable<tbl_Okey_TablePlayer> newPositions = afterPlayers.Concat(beforePlayers);
    result = afterPlayers.concat(beforePlayers);
} else {
    result = data;
}
  • There is no FindIndex in the core of javascript, so I did a while loop to find the index
  • I use .slice() to replace GetRange
  • Rest of the code should be clear enough. The all code could be simplified with libraries like underscore

Example fiddle

Volune
  • 4,324
  • 22
  • 23
0

If the goal is to order by UserID DESC, OkeyTable... ASC

You can define a customer sort function:

In action: http://repl.it/XZm

var json = [/*all your data */]
function idSort(a,b){
    if(a["UserID"] !== b["UserID"]){
        return b["UserID"] - a["UserID"];
    } else {
        return a["OkeyTablePlayerChairNumber"] - b["OkeyTablePlayerChairNumber"];
    }
}
var sorted = json.sort(idSort);

Results:

[ { Username: 'Mehmet', UserID: 2, OkeyTablePlayerChairNumber: 1 },
  { Username: 'Erçin', UserID: 1, OkeyTablePlayerChairNumber: 3 },
  { Username: null, UserID: 0, OkeyTablePlayerChairNumber: 2 },
  { Username: null, UserID: 0, OkeyTablePlayerChairNumber: 4 },
  { Username: null, UserID: 0, OkeyTablePlayerChairNumber: 5 },
  { Username: null, UserID: 0, OkeyTablePlayerChairNumber: 6 },
  { Username: null, UserID: 0, OkeyTablePlayerChairNumber: 7 },
  { Username: null, UserID: 0, OkeyTablePlayerChairNumber: 8 },
  { Username: null, UserID: 0, OkeyTablePlayerChairNumber: 9 } ]

Here is UserID ASC, OkeyTable...ASC:

function idSort(a,b){
    var notZero = (a["UserID"] > 0 && b["UserID"] > 0);
    var notEqual = (a["UserID"] !== b["UserID"]);
    if(notZero && notEqual){
        return a["UserID"] - b["UserID"];
    } else {
        return a["OkeyTablePlayerChairNumber"] - b["OkeyTablePlayerChairNumber"];
    }
}
var sorted = json.sort(idSort);

Results:

[ { Username: 'Erçin', UserID: 1, OkeyTablePlayerChairNumber: 3 },
  { Username: 'Mehmet', UserID: 2, OkeyTablePlayerChairNumber: 1 },
  { Username: null, UserID: 0, OkeyTablePlayerChairNumber: 2 },
  { Username: null, UserID: 0, OkeyTablePlayerChairNumber: 4 },
  { Username: null, UserID: 0, OkeyTablePlayerChairNumber: 5 },
  { Username: null, UserID: 0, OkeyTablePlayerChairNumber: 6 },
  { Username: null, UserID: 0, OkeyTablePlayerChairNumber: 7 },
  { Username: null, UserID: 0, OkeyTablePlayerChairNumber: 8 },
  { Username: null, UserID: 0, OkeyTablePlayerChairNumber: 9 } ]

In action: http://repl.it/XZm/1

Gabs00
  • 1,869
  • 1
  • 13
  • 12