问题:请编一函数,实现将以下无规则的二维数组按指定列排序.
备注:如果某列全为数字就按数字排序,否则按字符串排序
var myArr=[[1,2,3,4,5],
[1.0,3,5,88,461,"x"],
[0.56,4568,"0.3"],
"0.5",
["xp","linux"],
"clip,dos,12px",
[3.2,0123,3.14,56],
2312,[0]];Array.prototype.order=function(nColumn,bDesc){
//nColumn按那一列排序,bDesc是否逆序
var orderType=0;//0数字排序,1字符串排序
for(var iLine in this)
{//将二维数组的每一行都数组化
if(typeof(this[iLine])=="number"){this[iLine]=[this[iLine]];}
if(typeof(this[iLine])=="string"){this[iLine]=this[iLine].split(",");}
if(typeof(this[iLine][nColumn])=="string"){orderType=1;}
}
//***请你补全...
}myArr.order();//默认按首列顺排序
myArr.order(2,1);//指定按第三列逆排序
myArr.order(1);//指定按第二列顺排序
备注:如果某列全为数字就按数字排序,否则按字符串排序
var myArr=[[1,2,3,4,5],
[1.0,3,5,88,461,"x"],
[0.56,4568,"0.3"],
"0.5",
["xp","linux"],
"clip,dos,12px",
[3.2,0123,3.14,56],
2312,[0]];Array.prototype.order=function(nColumn,bDesc){
//nColumn按那一列排序,bDesc是否逆序
var orderType=0;//0数字排序,1字符串排序
for(var iLine in this)
{//将二维数组的每一行都数组化
if(typeof(this[iLine])=="number"){this[iLine]=[this[iLine]];}
if(typeof(this[iLine])=="string"){this[iLine]=this[iLine].split(",");}
if(typeof(this[iLine][nColumn])=="string"){orderType=1;}
}
//***请你补全...
}myArr.order();//默认按首列顺排序
myArr.order(2,1);//指定按第三列逆排序
myArr.order(1);//指定按第二列顺排序
可能有BUG,
根据自己需求改改吧。<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script>
function $(id){
return document.getElementById(id);
}
var myArr = [
[2.1, 2, 3, 4, 5],
[1.0, 3, 5, 88, 461, "x"],
[0.56, 4568, "0.3"],
"0.5",
["xp", "linux"],
"clip,dos,12px",
[3.2, 0123, 3.14, 56],
2312,
[0]
];
// nColumn : 按那一列排序,bDesc是否逆序
// bDesc : true - 逆序, false 或者 null - 顺序
Array.prototype.order = function(nColumn, bDesc){
// 设定默认参数
if (!nColumn)
nColumn = 0;
if (!bDesc)
bDesc = false;
//0数字排序,1字符串排序
var orderType = 0;
for (var iLine in this) {//将二维数组的每一行都数组化
if (typeof(this[iLine]) == "number") {
this[iLine] = [this[iLine]];
}
if (typeof(this[iLine]) == "string") {
this[iLine] = this[iLine].split(",");
}
if (typeof(this[iLine][nColumn]) == "string") {
orderType = 1;
}
}
//***请你补全...
this.sort(function(a, b){
var ret;
if (a[nColumn]==null) {
return -1;
}
else
if (b[nColumn]==null) {
return 1;
}
else {
if (orderType == 0) {
ret = b[nColumn] - a[nColumn];
}
else {
ret = b[nColumn].toString().localeCompare(a[nColumn].toString());
}
} return (ret * (bDesc ? 1 : -1));
});
}
//
window.onload = function(){
$("div1").innerHTML += "<br>--myArr.order();--<br>";
myArr.order();//默认按首列顺排序
disp(myArr); $("div1").innerHTML += "<br>-- myArr.order(2, 1); --<br>";
myArr.order(2, true);//指定按第三列逆排序
disp(myArr); $("div1").innerHTML += "<br>-- myArr.order(1); --<br>";
myArr.order(1);//指定按第二列顺排序
disp(myArr);
}
function disp(){
var str = "";
for (var i = 0; i < myArr.length; i++) {
str += myArr[i].join(",") + "<br>";
}
$("div1").innerHTML += str;
}
</script>
</head>
<body>
<div id="div1">
</div>
</body>
</html>