排序数组问题 [英] Sort array question
问题描述
我正在使用以下代码从xml文件中检索数据,并且
填充了一个javascript数组。然后数据以html表格显示
表格。我希望能够按每列排序。一旦分割了
数组元素,对它们进行排序的最佳方法是什么?谢谢。
//用xml文件中的数据填充数据对象。
//数据是以逗号分隔的值列表
var jsData = new Array();
jsData [0] = {lib:" #field SUBLOOKUP_LIB#",doc:" #field SUBLOOKUP_DOC#",
com:" #field SUBLOOKUP_COM"};
//拆分每个元素的值
var o = jsData [0];
o.lib = o.lib.split(",");
o.doc = o.doc.split(",");
o.com = o.com.split(",");
ye*****@yahoo.com 写道:
[.. 。]我希望能够按每列排序。一旦分割了
数组元素,对它们进行排序的最佳方法是什么? [...]
//用xml文件中的数据填充数据对象。
//数据是以逗号分隔的值列表
var jsData = new Array();
jsData [0] = {lib:" #field SUBLOOKUP_LIB#",doc:" #field SUBLOOKUP_DOC#",
com:" #field SUBLOOKUP_COM"};
//拆分每个元素的值
var o = jsData [0];
o.lib = o.lib.split(",");
o .doc = o.doc.split(",");
o.com = o.com.split(",");
由于表格暗示了一行中所有数据的依赖关系,因此单独对每个列数组进行排序是没有意义的。
你需要一个不同的数据结构,然后你可以应用一个比较器:
//使每一行成为一个对象作为一个数组的元素。
var a = [] ;
for(var i = 0,len = o.lib.length; i< len; i ++)
{
a。 push({lib:o.lib [i],doc:o.doc [i],com:o.com [i]});
}
//比较器
函数sortByLibAsc(a,b)
{
if(a&& b)
{
if(a.lib< b.lib)
{
return -1 ;
}
否则if(a.lib> b.lib)
{
返回1;
}
}
返回0;
}
a.sort(sortByLib);
PointedEars
Thomas''PointedEars''Lahn写道:
//比较器
函数sortByLibAsc(a,b)
{
[...]
}
a.sort (sortByLib);
a.sort(sortByLibAsc);
当然。
PointedEars
感谢您的帮助Pointed,我越来越近了。
如何让我的数据看起来像这样...
jsData [0] = {lib:" string1",doc:" 01",com:" blah"};
jsData [1] = {lib:" string2",doc:" 02",com:" blah"};
jsData [2] = {lib:" string3",doc:" 03",com:" blah"};
jsData [3] = {lib:" string4",doc:" 04" ;,com:" blah"};
jsData [4] = {lib:" string5",doc:" 05",com:" blah"};
jsData [5] = {lib:" string6",doc:" 06",com:" blah"};
jsData [6] = {lib:" string7",doc:" 07",com:" blah"};
....来自我的数据对象,看起来像这样?
//这就是我提取数据的方式,但我需要它以上面的
格式
var jsData = new Array();
jsData [0] = {lib:" #field SUBLOOKUP_LIB#",doc:" #field SUBLOOKUP_DOC#",
com:" #field SUBLOOKUP_COM" ;};
var o = jsData [0];
o.lib = o.lib.split(",");
o.doc = o.doc.split(",");
o.com = o.com.split(",");
谢谢。
Hi, I''m using the following code to retrieve data from an xml file and
populate a javascript array. The data is then displayed in html table
form. I would like to then be able to sort by each column. Once the
array elements are split, what is the best way to sort them? Thank you.
//populate data object with data from xml file.
//Data is a comma delimited list of values
var jsData = new Array();
jsData[0] = {lib: "#field SUBLOOKUP_LIB#",doc: "#field SUBLOOKUP_DOC#",
com: "#field SUBLOOKUP_COM"};
//split up values for each element
var o = jsData[0];
o.lib = o.lib.split(",");
o.doc = o.doc.split(",");
o.com = o.com.split(",");
ye*****@yahoo.com wrote:
[...] I would like to then be able to sort by each column. Once the
array elements are split, what is the best way to sort them? [...]
//populate data object with data from xml file.
//Data is a comma delimited list of values
var jsData = new Array();
jsData[0] = {lib: "#field SUBLOOKUP_LIB#",doc: "#field SUBLOOKUP_DOC#",
com: "#field SUBLOOKUP_COM"};
//split up values for each element
var o = jsData[0];
o.lib = o.lib.split(",");
o.doc = o.doc.split(",");
o.com = o.com.split(",");
Since the table implies a dependency of all data in one row, it
does not make sense to sort each column array independently.
You need a different data structure, then you can apply a comparator:
// make each row an object as element of an array.
var a = [];
for (var i = 0, len = o.lib.length; i < len; i++)
{
a.push({lib: o.lib[i], doc: o.doc[i], com: o.com[i]});
}
// comparator
function sortByLibAsc(a, b)
{
if (a && b)
{
if (a.lib < b.lib)
{
return -1;
}
else if (a.lib > b.lib)
{
return 1;
}
}
return 0;
}
a.sort(sortByLib);
PointedEars
Thomas ''PointedEars'' Lahn wrote:
// comparator
function sortByLibAsc(a, b)
{
[...]
}
a.sort(sortByLib);
a.sort(sortByLibAsc);
of course.
PointedEars
thank you for the help Pointed, I''m getting closer.
How can I get my data to look like this...
jsData[0] = {lib:"string1",doc:"01",com:"blah"};
jsData[1] = {lib:"string2",doc:"02",com:"blah"};
jsData[2] = {lib:"string3",doc:"03",com:"blah"};
jsData[3] = {lib:"string4",doc:"04",com:"blah"};
jsData[4] = {lib:"string5",doc:"05",com:"blah"};
jsData[5] = {lib:"string6",doc:"06",com:"blah"};
jsData[6] = {lib:"string7",doc:"07",com:"blah"};
....from my data object that looks like this?
//this is how I extract the data, but I need it to be in the above
format
var jsData = new Array();
jsData[0] = {lib: "#field SUBLOOKUP_LIB#",doc: "#field SUBLOOKUP_DOC#",
com: "#field SUBLOOKUP_COM"};
var o = jsData[0];
o.lib = o.lib.split(",");
o.doc = o.doc.split(",");
o.com = o.com.split(",");
Thanks.
这篇关于排序数组问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!