58
55

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Javascriptでオブジェクトの配列をKey/Valueでソートする関数

Last updated at Posted at 2014-06-06

オブジェクトの配列をオブジェクトのキー/値をもとにソートしたいと思ったときに作った関数を公開します。Node.jsでしか挙動確認していません。

##対象となるオブジェクトの配列の構造
あくまで例です。

[ 
  { user_name: 'のびすけ',
    area: '台中市',
    title: 'Qiitaのデザイン',  
    thread_id: 34,
    read_status: 0,
    newest_time: Wed Jun 04 2014 04:45:25 GMT+0000 (UTC),
    id: 1298 },
  { user_name: 'のびすけ',
    area: '台中市',
    title: 'aaa',
    thread_id: 37,
    read_status: 0,
    id: 1356 },
  { user_name: '菅原 遼介',
    area: '台中市',
    title: 'フルスタックな営業募集',
    thread_id: 36,
    newest_time: Fri Jun 06 2014 03:52:30 GMT+0000 (UTC),
    id: 1353 }
]

複数のオブジェクトが配列の中にある感じです。=> [{...},{...},{...}]

このときに例えばidが若い順番にオブジェクトをソートしたいってことがあると思います。これを実現する関数を作ってみました。

##自作した関数
実際にはNode.jsで利用しているのでコールバック出来るようにしています。

  • 第1引数: オブジェクトの配列 [Array]
  • 第2引数: ソートの軸にしたいキー名 [String]
  • 第3引数: 降順(desc)か昇順(asc)か [String]
  • 第4引数: コールバック関数
object_array_sort.js

  function object_array_sort(data,key,order,fn){
    //デフォは降順(DESC)
    var num_a = -1;
    var num_b = 1;

    if(order === 'asc'){//指定があれば昇順(ASC)
      num_a = 1;
      num_b = -1;
    }

   data = data.sort(function(a, b){
      var x = a[key];
      var y = b[key];
      if (x > y) return num_a;
      if (x < y) return num_b;
      return 0;
    });

   fn(data); // ソート後の配列を返す
  }

##使い方

idの値が若い順に並び替えている例です。

index.js

var data =  [{...},{...},{...}]; //利用したいオブジェクト配列

object_array_sort(data, 'id', 'asc', function(new_data){
	//ソート後の処理
	console.log(new_data); //
});

##結果

idが若いオブジェクトの順番にソートがされました。

[ 
  { user_name: 'のびすけ',
    area: '台中市',
    title: 'Qiitaのデザイン',  
    thread_id: 34,
    read_status: 0,
    newest_time: Wed Jun 04 2014 04:45:25 GMT+0000 (UTC),
    id: 1298 },
  { user_name: '菅原 遼介',
    area: '台中市',
    title: 'フルスタックな営業募集',
    thread_id: 36,
    newest_time: Fri Jun 06 2014 03:52:30 GMT+0000 (UTC),
    id: 1353 },
  { user_name: 'のびすけ',
    area: '台中市',
    title: 'aaa',
    thread_id: 37,
    read_status: 0,
    id: 1356 }
]

良かったらツッコミとか待ってます!

参考: WEB開発備忘録 Javascriptで、連想配列(ハッシュ/hash)のキーを変数で指定するには? -
参考: [JavaScript]配列の配列・オブジェクトの配列をソート | 言葉の海のプログラマー -

58
55
2

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
58
55

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?