Array.prototype.sort メソッドは配列を並べ替えるために、関数パラメータを使用して並べ替え規則を指定します。
まず、sort の簡単な応用を見てみましょう。
var arr=[2,1,3,4];
alert(arr.sort()) // [1,2,3,4] 小さいものから大きいものへ並べます
// 次に、大きいものから小さいものへ並べて [4,3,2,1] を取得します
alert(arr.sort(function(left,right){return left>right?-1:1}))
//ここで、sort メソッドはパラメーター関数の戻り値 1 または -1 を使用して、ソートするかどうかを決定します。配列
内の最大の要素を取得するために Function.apply メソッドを使用することについて前に説明したことを覚えていますか?
この記事では、2 つの異なる方法を使用して配列の最大値を取得します。
var arr=[2,1,3,4];
を表示できるようになりました。
var minValue=arr.sort()[0];
var maxValue=arr.sort()[arr.length-1] // arr.sort().pop() はどうでしょうか
? これも、ループ トラバーサルを記述する必要はありません。
ただし、この方法は最も効率が低いことを指摘しなければなりません。数十または数百の要素を持つ配列に対してもこの手法を使用できます。
ただし、配列が非常に大きい場合、sort() メソッドの使用は非常に遅くなり、
複雑なデータ構造の並べ替えについてさらに詳しく説明します。
1. 多次元配列のソート
var arr=[
[2,1,55,4]、
[5,3,22,3]、
[1,2,77,2]、
[9,4,33,5]、
];
alert("デフォルトは最初の列で並べ替えられますn"+arr.sort().join("n"))
alert("今度は 3 列目で並べ替えますn"+arr.sort(function(left,right){return left[2]>right[2]?1:-1}).join("n"))
alert("3 列目を逆順に並べ替えますn"+arr.sort(function(left,right){return left[2]>right[2]?-1:1}).join("n "))
2. 複雑なデータ構造をソート
Array.prototype.each=function(f){for(var i=0;i<this.length;i++) f(this[i],i,this)}
function showName(item){alert(item.name)} //名前を出力します
var arr=[
{名前:「請求書」、金額:500}、
{名前:"go_rush"、お金:400}、
{名前:「ドゥドゥ」、お金:9000}
];
//dudu、bill、go_rush の順に表示します。どうやら dudu が最も裕福で、私が最も貧しいようです。
arr.sort(function(left,right){return left.money>right.money?-1:1}).each(showName)
3. 表を並べ替える、昨日この話題についてみんなと話しました。
以下も参照してください。
http://www.cnblogs.com/ashun/archive/2006/11/30/appendChild_table_sort.html
より複雑なテーブルの並べ替え (Array の並べ替え関数も使用):
http://community.csdn.net/expert/Topicview2.asp?id=5174915
4. Protype.js には、ソートのための非常に賢い拡張機能があります。まずそのコードを見てみましょう。
1 sortBy: function(iterator) {
2 return this.collect(関数(値, インデックス) {
3 return {値: 値, 条件: イテレータ(値, インデックス)};
4 }).sort(function(left, right) {
5 var a = left.criteria、b = right.criteria;
6 を返します a < b ? -1 : a > b ?
7 }).pluck('値');
8}、
この sortBy を使用すると、関数を渡し、配列の各要素をパラメーターとして使用して関数を実行し、最後に関数によって返された結果を並べ替えることができます。
以下に彼の役割を詳しく見てみましょう。
collect メソッドは実際には map メソッドと同等です。
Array.prototype.map=function(f){
for(var i=0;ret=[];i<this.length;i++) ret[i]=f(this[i],i,this)
リターンレット
たとえば
、今では
arr=[2,1,4,3]
iterator=function(x){return x*x}
このような配列は 1 ~ 3 行のコードで取得できます。
[
{値:2、基準:4}、
{値:1,基準:1},
{値:4、基準:16}、
{値:3、基準:9}
]
4 ~ 6 行のコードで、小さい順から大きい順に配列を並べ替えます。
[
{値:1,基準:1},
{値:2、基準:4}、
{値:3、基準:9}、
{値:4、基準:16}
]
コードの 7 行目は最も単純で、各要素の value 属性を取得し、最後に [1,2,3,4] を取得して、arr を並べ替えるための sortBy(function...) を実装します。
私の言語表現能力には限界があるのかもしれません。prototype.js で sortBy について話すとき、それをどのように言葉で表現したらよいのかわかりません。
http://www.cnblogs.com/ashun/archive/2006/12/01/sort_sortby_array_prototype.html
を読むのに皆さん大変苦労して申し訳ありません。