

[ニフティクラウドmobile backend レベルアップセミナー
クーポン配信アプリを作ろう【Monaca編】の「お気に入り登録」](https://qiita.com/thuydg@github/items/caf3b3cb988bf76459ae#%E3%81%8A%E6%B0%97%E3%81%AB%E5%85%A5%E3%82%8A%E7%99%BB%E9%8C%B2%E6%A9%9F%E8%83%BD%E3%81%AE%E4%BD%9C%E6%88%90-1)で、Shop情報を以下のコードで取得しています。

[code]

    //mBaaSにお気に入り登録されているShop情報を取得してリストに表示する
    function showFavorite() {
    
      //リストをリセットします。
      $("#listFavoriteShop").empty();
    
      //表示名を指定します。
      $("#favorite_nickName").text(currentLoginUser.nickname + "のお気に入りショップ");
    
      //お気に入り登録した値を取得
      var fav_shops = currentLoginUser.favorite;
    
      //ショップ一覧を表示
      for (var i = 0; i < shopArray.length; i++) {
        var shop = shopArray[i];
        var selectStr = "selected='true'";
    
        //ショップのお気に入りが登録された場合の表示
        var tmpStrOff = "<div class='ui-field-contain'><label for='" + shop.objectId + "'>" + shop.name + "</label><select name='favorite_shop' id='" + shop.objectId + "' data-role='slider' data-theme='e' ><option value='off' " + selectStr+ ">Off</option><option value='" + shop.objectId + "'>On</option></select></div>";
    
        // //ショップのお気に入りが登録されていない場合の表示
        var tmpStrOn = "<div class='ui-field-contain'><label for='" + shop.objectId + "'>" + shop.name + "</label><select name='favorite_shop' id='" + shop.objectId + "' data-role='slider' data-theme='e' ><option value='off'>Off</option><option value='" + shop.objectId + "' " + selectStr+ " >On</option></select></div>";
    
        if ($.inArray(shop.objectId, fav_shops) == -1 ){
          $("#listFavoriteShop").append(tmpStrOff);
        }else{
          $("#listFavoriteShop").append(tmpStrOn);
        }
      }
    
      //Switchスライダーを更新
      $( "select[name=favorite_shop]" ).slider({
        defaults: true
      });
      $('select[name=favorite_shop]').slider('refresh');
    
      //画面遷移
      $.mobile.changePage('#FavoritePage');
    }
    
[/code]

```  
このコードのままだと、nameの並び順を指定していないため、毎回、並び順が異なってしまいます。  
ついては、ショップの名前順で昇順に表示したいのですが、どのように記述すればよろしいしょうか。

データストアの表示画面  
[![画像の説明をここに入力](https://i.stack.imgur.com/0Z6uK.png)](https://i.stack.imgur.com/0Z6uK.png)

並び替えるコードとしてorderで指定することは公式ドキュメントに記載がありますが、どのように指定すればいいのかわからず、質問させていただきました。  
よろしくお願いいたします。


CC BY-SA 4.0
2018-07-11T02:22:36.517
45490
2020-08-05T12:00:30.063
2018-07-11T05:59:35.697
29249
question
javascript monaca
monacaからmBaaSの値を取得した値を並び替える方法


> ついては、ショップの名前順で昇順に表示したいのですが、どのように記述すればよろしいしょうか。

## データストアの機能を利用する場合

Monacaのデータストアは、`order`メソッドでソートできるようです。

[app.js:211行目](https://github.com/ncmbadmin/MonacaAdvancePush/blob/full_version/www/js/app.js#L211)を以下に変更すればソートできると思います。

[code]

    ShopClass.order("name").fetchAll()
    
[/code]

## JavaScriptの標準機能を使う場合

オブジェクト配列は以下のようにソートできます。([参考:
Array.prototype.sort()](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/sort))

[code]

    shopArray = [{name: 'shopC'}, {name: 'shopB'}, {name: 'shopA'}];
    var sortedShopArray =  shopArray.sort(function(a, b){
        if (a.name > b.name) {
            return 1;
        } else if (a.name === b.name) {
            return 0;
        } else {
            return -1;
        }
    })
    
    console.log(sorttedShopArray);  // => [ { name: 'shopA' }, { name: 'shopB' }, { name: 'shopC' } ]
    
[/code]

そのため、以下のように先にショップ一覧をソートしてから処理すれば良いと思います。

[code]

    // ショップ一覧をソート
    var sortedShopArray =  shopArray.sort(function(a, b){
      if (a.name > b.name) {
        return 1;
      } else if (a.name === b.name) {
        return 0;
      } else {
        return -1;
      }
    });
    // ショップ一覧を表示
    for (var i = 0; i < sortedShopArray.length; i++) {
      var shop = sortedShopArray[i];
      // 以下、略
    }
    
[/code]


CC BY-SA 4.0
2018-07-11T04:39:46.133
45493
2018-07-11T07:36:27.633
2018-07-11T07:36:27.633
45490
answer