我没有使用关联数组。我正在使用像这样的1d数组,如何在JavaScript中对数组进行排序
array("1,a","5,b","2,c","8,d","6,f");
我该如何排序这个数组?
结果应该是,
array("1,a","2,c","5,b","6,f","8,d");
我没有使用关联数组。我正在使用像这样的1d数组,如何在JavaScript中对数组进行排序
array("1,a","5,b","2,c","8,d","6,f");
我该如何排序这个数组?
结果应该是,
array("1,a","2,c","5,b","6,f","8,d");
我要继续前进,假设你想通过数字部分首先进行排序,排序数字,然后有一个次要的词素文字(字符串)排序上逗号后的位。这样一个像“11,a”这样的值将会在“2,a”之后结束 - 如果你只是默认排序“11,a”将会在“2,a”之前结束。所以:
var a = ["1,a","11,a","8,a","24,z","5,b","2,c","8,d","6,f"];
a.sort(function(a,b) {
var aparts = a.split(","),
bparts = b.split(","),
anum = +aparts[0], // convert first part to number
bnum = +bparts[0],
aletter = aparts[1],
bletter = bparts[1];
if (anum === bnum)
return aletter < bletter ? -1 : aletter === bletter ? 0 : -1;
else
return anum - bnum;
});
结果:
["1,a", "2,c", "5,b", "6,f", "8,a", "8,d", "11,a", "24,z"]
太好了。我有类似的pblm。我刚才注意到了它。如果第二个元素是相似的,那么它没有正确排序。你的代码帮助了我。 Thanx很多 – Anish 2011-12-28 06:28:24
@Anish,亚历克斯处理这件事更加优雅... http://stackoverflow.com/a/8652418/555384 – jondavidjohn 2011-12-28 06:32:55
@jondavidjohn - 可能更优雅,但它不是等同的,因为它不包括在阿尔法部分进行二次排序。 – nnnnnn 2011-12-28 06:39:23
使用array.sort()
内置JS功能。文档浏览:http://www.w3schools.com/jsref/jsref_sort.asp
array.sort不会排序上述一个正确 – Anish 2011-12-28 05:57:22
+1,但我想在W3School上倡导MDN(https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/sort)。看看为什么http://w3fools.com/ – 2011-12-28 05:58:27
@Anish是的。看到我的工作示例代码... http://jsfiddle.net/Dht33/ – jondavidjohn 2011-12-28 05:59:46
var arrayVar = ["1,a","2,c","5,b","6,f","8,d"];
arrayVar.sort()
arrayVar; // "1,a","2,c","5,b","6,f","8,d"
是啊..它的作品.... – Anish 2011-12-28 06:05:42
尝试:你怎么想(字典序)
function sortNumber(a,b)
{
return (a.split(","))[0] - (b.split(","))[0] ;
}
var n = ["1,a","5,b","2,c","8,d","6,f"];
alert(n.sort(sortNumber));
没有。这不是排序 – Anish 2011-12-28 06:02:10
抱歉 - 我的错误 - 我更正了代码 - 现在它工作 – 2011-12-28 06:13:08
sort()
没有自定义排序功能排序。
>>> ["1,a","5,b","2,c","8,d","6,f"].sort();
["1,a", "2,c", "5,b", "6,f", "8,d"]
请注意,这将对原始数组进行排序。您可以使用slice()
进行浅拷贝。
如果您的数字比9
大,要通过数的顺序进行排序,你会需要一个自定义排序功能。
["1,a","5,b","2,c","8,d","6,f"].sort(function(a, b) {
return parseInt(a, 10) - parseInt(b, 10);
});
感谢您的回复。 jondavidjohn的代码适用于我。 – Anish 2011-12-28 06:13:53
这是我做的:
var arr1 = new Array("1,a","5,b","2,c","8,d","6,f");
var arr2 = arr1.sort(function(a, b){
var ax = a.split(",");
var bx = b.split(",");
return ax[0]-bx[0];
});
document.getElementById("result").innerHTML = arr2.join(" : ");
你需要编写自己的比较函数来比较数字,否则默认sort()
会把类似"40,a"
"5,b"
之前。
下面是刚刚拆分对,
字符并假定值之前,它是数值的例子。我在示例中添加了"40,a"
以表明它正确地命令数字> 9。
function mySort(a,b)
{
return a.split(",", 1) - b.split(",", 1);
}
var theArray = ["1,a", "5,b", "2,c", "40,a", "8,d", "6,f"];
theArray.sort(mySort); // "1,a","2,c","5,b","6,f","8,d","40,a"
Thanx为您的答复。我认为默认排序()为我做了一件工作。 – Anish 2011-12-28 06:11:48
试试这个:
<script type="text/javascript">
var testArray = new Array();
testArray[0] = '1';
testArray[1] = '5';
testArray[2] = '9';
testArray[3] = '8';
testArray[4] = '6';
testArray[5] = '2';
var getlength = testArray.length;
testArray.sort(function(a,b){return a - b});
for(var i=0; i<getlength;i++) {
alert(testArray[i]);
}
</script>
尝试是你[`的.sort()`](https://developer.mozilla.org具有这种
<script>
var abc=new Array("1,a","5,b","2,c","8,d","6,f");
document.write("<br/>");
document.write(abc.sort());
</script>
什么问题/ EN/JavaScript的/参考/ Global_Objects /阵列/排序)?想法是先按数字进行数字排序,再按下列字母进行排序?或者只是对整个文本进行标准的字符串排序?也就是说,要排序怎么办'[ “1,” “11,” “2,B”, “2,C”]' – nnnnnn 2011-12-28 06:03:25
排序()正在..我犯了一个错误我码。 – Anish 2011-12-28 06:06:56
[自然排序的文本和数字,JavaScript]可能的重复(http://stackoverflow.com/questions/2802341/natural-sort-of-text-and-numbers-javascript) – outis 2011-12-28 06:14:20