文字列のソート
sort()で事足りると思ったが、大文字や小文字のアルファベットがあった時に期待しているような並びにならなかった。
var items = ["Orange", "banana", "apple", "Peach"];
items.sort();
// ["Orange", "Peach", "apple", "banana"]
比較関数を指定してやるといいようだ。
var items = ["Orange", "banana", "apple", "Peach"];
items.sort(function(a, b){
a = a.toString().toLowerCase();
b = b.toString().toLowerCase();
if(a < b){
return -1;
}else if(a > b){
return 1;
}
return 0;
});
// ["apple", "banana", "Orange", "Peach"]
数字のソート
数字もsort()だけではうまくいかない…。
var nums = [ 3, 6, 4 ,21, 15];
nums.sort();
// [15, 21, 3, 4, 6]
引数に比較関数。
var nums = [ 3, 6, 4 ,21, 15];
nums.sort(function(a, b){
return a - b;
});
// [3, 4, 6, 15, 21]
Objectの特定のキーによるソート
var fruits = [
{name:"apple",price:100},
{name:"orange",price:98},
{name:"banana",price:50},
{name:"melon",price:500},
{name:"mango",price:398}
];
// priceでソート
fruits.sort(function(a,b){
if(a.price<b.price) return -1;
if(a.price > b.price) return 1;
return 0;
});
// {name: "banana", price: 50}
// {name: "orange", price: 98}
// {name: "apple", price: 100}
// {name: "mango", price: 398}
// {name: "melon", price: 500}
複数のキーでソート
var fruits = [
{name:"apple",price:100,weight:90},
{name:"mango",price:500,weight:200},
{name:"orange",price:98,weight:150},
{name:"apple",price:100,weight:100},
{name:"banana",price:50,weight:50},
{name:"melon",price:500,weight:500},
{name:"mango",price:398,weight:200}
];
fruits.sort(function(a,b){
if(a.weight>b.weight) return 1;
if(a.weight<b.weight) return -1;
if(a.price>b.price) return 1;
if(a.price < b.price) return -1;
return 0;
});
// {name: "banana", price: 50, weight: 50}
// {name: "apple", price: 100, weight: 90}
// {name: "apple", price: 100, weight: 100}
// {name: "orange", price: 98, weight: 150}
// {name: "mango", price: 398, weight: 200}
// {name: "mango", price: 500, weight: 200}
// {name: "melon", price: 500, weight: 500}