排序数组问题 [英] Sort array question

查看:82
本文介绍了排序数组问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用以下代码从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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆