LoginSignup
1
0

More than 3 years have passed since last update.

配列のソート

Posted at

文字列のソート

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}
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0