使用JavaScript对JSON数据进行排序
我正在寻找从我的JSON提供程序订购数据的方法:使用JavaScript对JSON数据进行排序,javascript,jquery,Javascript,Jquery,我正在寻找从我的JSON提供程序订购数据的方法: [{"Username":"Mehmet","UserID":2,"OkeyTablePlayerChairNumber":1}, {"Username":null,"UserID":0,"OkeyTablePlayerChairNumber":2}, {"Username":"Erçin","UserID":1,"OkeyTablePlayerChairNumber":3}, {"Username":null,"UserID":0,"OkeyT
[{"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}]
订购时还有两件更重要的事情:
[{"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#我以前做过的解决方案;但我需要JS解决方案:
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);
int-yourSitPositionIndex=playersonetablewithempypositions.ToList().FindIndex(x=>x.UserID==UserID);
var beforePlayers=playersonetablewithempypositions.ToList().GetRange(0,yourSitPositionIndex);
IEnumerable afterPlayers=具有临时位置的etables上的玩家。除了(在玩家之前);
IEnumerable newPositions=afterPlayers.Concat(beforePlayers);
转换您的C#解决方案:
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;
}
var wantedId=1;
var指数=0,结果;
//int yourSitPositionIndex=playersonetablewithempypositions.ToList().FindIndex(x=>x.UserID==UserID);
而(index
- javascript的核心中没有
,所以我做了一个while循环来查找索引FindIndex
- 我用于替换
GetRange
- 代码的其余部分应该足够清晰。所有代码都可以通过以下库简化
如果目标是按用户ID描述订购,则OkeyTable。。。ASC 您可以定义客户排序功能: 在行动中: 结果:
[ { 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 } ]
[ { 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 } ]
这是用户ID 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);
结果:
[ { 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 } ]
[ { 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 } ]
行动:为什么要投反对票,请解释一下。(不知道投反对票的情况)你试过什么?您是将数据转换成字符串还是javascript对象?谢谢;我的数据来自jQuery.parseJSON(obj)(编辑:顺便说一句,我尝试了JSON.search,但我对JSON是新手)在你的例子中,你真的需要把
OkeyTablePlayerChairNumber=1
和OkeyTablePlayerChairNumber=2
的元素放在最后,还是把它们放在UserID=1
元素之后的任何地方都可以?(再说一遍,你试过什么?)不是重复的,你不能用简单的排序来解决这个问题,因为必须考虑数组的初始状态。非常好。谢谢!