Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用JavaScript对JSON数据进行排序_Javascript_Jquery - Fatal编程技术网

使用JavaScript对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

我正在寻找从我的JSON提供程序订购数据的方法:

[{"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}]
订购时还有两件更重要的事情:

  • OkeyTablePlayerHairNumber
  • 首先使用用户ID;让我解释一下:
  • 我想先按OkeyTableChairNumber订购;这已经由服务器端完成。数据由OkeyTablePlayerChairNumber ASC订购

    现在公牛, 我想按用户ID订购,但是;例如,如果我取UserID==1,它应该对它们进行排序,比如:UserID==1字段,将出现在第一个字段中。上面的对象将被删除并添加到列表的末尾

    查看:

    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#我以前做过的解决方案;但我需要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的核心中没有
      FindIndex
      ,所以我做了一个while循环来查找索引
    • 我用于替换
      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
    元素之后的任何地方都可以?(再说一遍,你试过什么?)不是重复的,你不能用简单的排序来解决这个问题,因为必须考虑数组的初始状态。非常好。谢谢!