Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.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表中重新排序数据_Javascript_Jquery - Fatal编程技术网

如何在按特定列排序的javascript表中重新排序数据

如何在按特定列排序的javascript表中重新排序数据,javascript,jquery,Javascript,Jquery,通过javascript,我为表中的代理生成行。每一行代表一个代理。在此之后,我将接收实时数据以更新列。我有一个名为(Calls)的列,我需要按调用(实时更新,取决于接收到的数据)降序排列代理。范例 agents ----- calls Sam ---------13 Al ---------12 Sara---------8 代理人——电话 山姆------13 艾尔------12 萨拉------8 如果莎拉到时候得到的数据最多,那么她将是第一个 agents -------calls

通过javascript,我为表中的代理生成行。每一行代表一个代理。在此之后,我将接收实时数据以更新列。我有一个名为(Calls)的列,我需要按调用(实时更新,取决于接收到的数据)降序排列代理。范例

agents ----- calls Sam ---------13 Al ---------12 Sara---------8 代理人——电话 山姆------13 艾尔------12 萨拉------8 如果莎拉到时候得到的数据最多,那么她将是第一个

agents -------calls Sara----------15 Sam ----------13 Al------------12 代理商------电话 莎拉----------15 山姆------13 艾尔------------12 等等

这是我的行渲染

var $agentRow = '<tr id="agentRow_' + agentId + '"><th scope="row">' + agentName + '</th><td class="calls" id="agentCalls_' + agentId + '">' + outTotalCalls +
            '</td><td class="minutes" id="agentMinutes_' + agentId + '">' +
            outCallMinutes + '</td>' +
            '<td class="averages" id="agentAverage_' + agentId + '">' + averageOutCallTime + '</td></tr>';

    //if $agentRow exists invoke setIncomingValuesToAgentsFields else append it to the table
    if ($('#agentRow_' + agentId).length) {
        setIncomingValuesToAgentsFields('#agentCalls_' + agentId, outTotalCalls);
        setIncomingValuesToAgentsFields('#agentMinutes_' + agentId, outCallMinutes);
        setIncomingValuesToAgentsFields('#agentAverage_' + agentId, averageOutCallTime);
    } else {
        $('#agentsTable').append($agentRow);
    }


function setIncomingValuesToAgentsFields(elementId, inComingValue) {
    var currentElementValue = 0;
    if ($(elementId).text() !== "") {
        currentElementValue = $(elementId).text();
        currentElementValue = parseFloat(currentElementValue);
        currentElementValue += inComingValue;
        $(elementId).text(currentElementValue);
    } else {
        $(elementId).text(currentElementValue);
    }
}
var$agentRow=''+agentName+''+outTotalCalls+
'' +
outCallMinutes+“”+
''+平均OutCallTime+'';
//如果存在$agentRow,则调用setIncomingValuesToAgentsFields,否则将其追加到表中
如果($('#agentRow'+agentId).length){
设置IncomingValuesToAgentsFields(“#agentCalls”+agentId,outTotalCalls);
设置IncomingValuesToAgentsFields(“#agentMinutes”+agentId,outCallMinutes);
将IncomingValuesToAgentsFields设置为(“#agentAverage”+agentId,averageOutCallTime);
}否则{
$(“#agentsTable”).append($agentRow);
}
函数setIncomingValuesToAgentsFields(elementId,inComingValue){
var currentElementValue=0;
if($(elementId).text()!==“”){
currentElementValue=$(elementId).text();
currentElementValue=parseFloat(currentElementValue);
currentElementValue+=输入值;
$(elementId).text(currentElementValue);
}否则{
$(elementId).text(currentElementValue);
}
}

希望您将使用Ajax调用从服务器获取数据。因此,如果您在JSON对象中有结果数据,那么您可以对数据进行排序,找出哪个值最高。下面的函数将帮助我们对数据进行排序

sortTable:function (property,asc)
{
    sampleTableObject = sampleTableObject.sort(function(a, b) {
        if (asc) return (a[property] > b[property]) ? 1 : ((a[property] < b[property]) ? -1 : 0);
        else return (b[property] > a[property]) ? 1 : ((b[property] < a[property]) ? -1 : 0);
    });     
}
sortTable:函数(属性,asc)
{
sampleTableObject=sampleTableObject.sort(函数(a,b){
如果(asc)返回(a[property]>b[property])?1:((a[property]a[property])?1:((b[property]
property是json对象属性(这里应该是调用),您需要根据该属性进行排序

将false传递给“asc”以按降序排序


使用结果json对象分配sampleTableObject,并调用sortTable()。然后使用排序对象构建表。

查看所需内容的实时示例。3秒钟后,Al调用变为14,表行将再次排序

var代理=[
{姓名:'Sara',呼叫:15},
{姓名:'Sam',呼叫:13},
{name:'Al',calls:12}
];
功能至_行(obj){
var tr=$('');
tr.data(“obj”,obj);
$(''+对象名称+'')。附录(tr);
$(''+对象调用+'').appendTo(tr);
返回tr;
}
功能表_更新(obj){
$('#table tr')。每个(函数(){
var t=$(本);
var o=t.数据('obj');
if(o.name==obj.name){
t、 删除();
};
如果(o.calls>obj.calls){
至世界其他地区(obj)。在(t)之后插入;
}
返回t.data(“obj”);
})    
}
agent.sort(函数(x,y){
返回y.calls-x.calls;
}).forEach(函数(o){
至第(o)行。附录($(“#表”);
});
setTimeout(函数(){
表u更新({name:'Al',calls:14});
}, 3000);


看看这个,你可以创建一些看起来不错的东西,但我不需要单击。在ajax成功结束时,只要调用函数,就会在tv上显示这一面。这很简单。无需点击…仅供参考,兼容移动设备的牙齿数据都是int/float格式,只有名称是字符串。我可以装箱一个对象并将其传递给此函数吗?或者传递属性?是JSON/text。请发布一些样本数据。如果它是一个json对象,它会用你的对象名对sampleTableObject进行编码,并调用这个函数进行排序。谢谢你的帮助!我用另一种方法解决它,但我会把答案看成是绿色的。谢谢,这就是我所需要的。