Javascript:对对象进行排序
我正在寻找一些如何实现这一点的想法,因为我正在碰壁 我有一个表,显示从MySQL数据库中提取的数据。该表按一行13个单元格的顺序显示数据,然后是一个隐藏行1个单元格。通过单击上一行的单元格索引1中的链接来切换隐藏行。像这样: 第1行:单击此单元格显示第2行:另一个单元格:另一个单元格:ad nauseum,直到13: 隐藏的第2行 第3行:单击此单元格显示第2行:另一个单元格:另一个单元格:ad nauseum,直到13: 隐藏的第4行 因此,我使用jquery提取所有行,然后设置一个测试来确定它是显示的行还是隐藏的行,如果它被显示,那么我将该行和下面的行放入一个对象中,然后将该对象放入另一个对象中,如下所示:Javascript:对对象进行排序,javascript,arrays,sorting,object,Javascript,Arrays,Sorting,Object,我正在寻找一些如何实现这一点的想法,因为我正在碰壁 我有一个表,显示从MySQL数据库中提取的数据。该表按一行13个单元格的顺序显示数据,然后是一个隐藏行1个单元格。通过单击上一行的单元格索引1中的链接来切换隐藏行。像这样: 第1行:单击此单元格显示第2行:另一个单元格:另一个单元格:ad nauseum,直到13: 隐藏的第2行 第3行:单击此单元格显示第2行:另一个单元格:另一个单元格:ad nauseum,直到13: 隐藏的第4行 因此,我使用jquery提取所有行,然后设置一个测试来确
//this function is for sorting the data in the table
$(".sort").click(function() {
//get what column we are sorting by
var sortBy = $(this).attr('sortBy');
//set the colnum to sort by
if (sortBy == "itemname") {
var sortCol = 1;
} else if (sortBy == "priority") {
var sortCol = 2;
} else if (sortBy == "livedate") {
var sortCol = 10;
} else if (sortBy == "status") {
var sortCol = 11;
} else if (sortBy == "designer") {
var sortCol = 12;
}
//get the table data
var tableData = getTableData("NO", "null", "YES", sortBy);
//get all the rows
var tableRowArray = $("#productTableBody tr");
//declare new table object
var tableObj = new Object;
var rowPackage = new Object;
//loop through tableRowArray and put rows into packages of two, the main row and the hidden row
for(var t=0; t<tableRowArray.length; t++) {
if($(tableRowArray[t]).children(":first").attr('class') == "colorCode") {
rowPackage[t] = $(tableRowArray[t]).children();
rowPackage[t+1] = $(tableRowArray[t+1]).children();
//dump rows into tableObj
tableObj[t] = rowPackage;
}
//clean out rowPackage
rowPackage = {};
}
var x=-2;
for(thisRow in tableObj) {
x = x+2;
var sortItem = $(tableObj[thisRow][x][sortCol]).html();
//ack! -->getting stumped here
}
});
//此函数用于对表中的数据进行排序
$(“.sort”)。单击(函数(){
//获取我们要排序的列
var sortBy=$(this.attr('sortBy');
//将colnum设置为按排序
if(sortBy==“itemname”){
var-sortCol=1;
}else if(sortBy==“优先级”){
var-sortCol=2;
}else if(sortBy==“livedate”){
var-sortCol=10;
}else if(sortBy==“status”){
var-sortCol=11;
}else if(sortBy==“designer”){
var-sortCol=12;
}
//获取表数据
var tableData=getTableData(“否”、“空”、“是”,排序);
//弄到所有的行
var tableRowArray=$(“#productTableBody tr”);
//声明新表对象
var tableObj=新对象;
var rowPackage=新对象;
//循环遍历tableRowArray并将行放入两个包中,一个是主行,另一个是隐藏行
对于(var t=0;t在此处设置
}
});
我还收集了用户想要排序的列。然后我可以找到用户想要排序的单元格。我知道我需要提取这些信息,放入一个数组并进行排序,但我想我在如何将排序后的数组应用回我的tableObj以便我可以重写表体HTML方面遇到了难题……我遇到难题的原因是要排序的数据将是相同的,例如,如果按设计器排序,则数据可能是{“a”、“b”、“c”、“c”、“a”、“a”、“a”},排序时将是a、a、a、a、b、c、c,但由于其中一些是相同的,我无法返回并循环遍历对象并找到与排序数组中的第一项匹配的条目,4个条目将与之匹配。因此,如何确定对象中的哪个条目与排序列表中的第一个a匹配
提前谢谢。这很难,但我想这辈子几乎没有什么不可能的事 我想要这个(使用)
代码可能无法完美地反映您的情况,但我认为您应该能够理解主要思想。这是一个困难的问题,但我认为在这一生中几乎没有什么不可能的事情 我想要这个(使用)
代码可能无法完美地反映您的情况,但我认为您应该能够了解主要内容。要获得您在此处要求的内容并不容易,但这至少可以让您对数据进行排序 首先将数据收集到一个数组中,例如
data
,每一行可以由数组或对象表示
现在只要打电话
data.sort(function(a, b){
// select the two values from a and b depending on the column to sort by
a = a[colNr];
b = b[colNr];
return a == b ? 0 : a < b ? -1 : 1;
});
data.sort(函数(a,b){
//根据要排序的列,从a和b中选择两个值
a=a[colNr];
b=b[colNr];
返回a==b?0:a
现在,您可以基于排序的数组轻松地重建表
如果您在数据收集过程中还向数组/对象添加了对行的引用,那么您现在可以从表中删除所有行,在
数据数组上循环,然后将每个节点添加回表中。要获得您在此处要求的内容并不容易,但这至少可以让您对数据进行排序
首先将数据收集到一个数组中,例如data
,每一行可以由数组或对象表示
现在只要打电话
data.sort(function(a, b){
// select the two values from a and b depending on the column to sort by
a = a[colNr];
b = b[colNr];
return a == b ? 0 : a < b ? -1 : 1;
});
data.sort(函数(a,b){
//根据要排序的列,从a和b中选择两个值
a=a[colNr];
b=b[colNr];
返回a==b?0:a
现在,您可以基于排序的数组轻松地重建表
如果您在数据收集过程中还向数组/对象添加了对行的引用,那么您现在可以从表中删除所有行,循环数据数组,并将每个节点添加回表中。仅供参考,常规数组排序很好。您只需比较两个不同行的单元格。谢谢,我需要排序通过你的代码(糟糕的双关语:D)并让它在我的情况下工作…仅供参考,普通数组排序可以用于此。你只需要比较两行中的单元格。谢谢,我需要对你的代码进行排序(糟糕的双关语:D)让它在我的情况下工作…排序提取的数据数组不是问题,将它关联回从中提取数据的行是因为存在重复的值。这有什么问题吗?您可以轻松地将对domeElement的引用添加到数组/对象中,或者每次只需删除并重建表f拉取的数据不是问题,将其关联回从中拉取的行是因为存在重复的值。这有什么问题?您可以轻松地将对DomeElement的引用添加到数组/对象中,或者每次删除并重新生成表。