2016-10-26 11 views
0

このような配列:このAngularJS/javascript javascriptオブジェクトの特殊なソート順

[item1, item2, item5, item4, item3] 

ようになっているはずですので、12時○○前にスタート - 時間との項目が昇順する必要があると開始時間を持つアイテムの後に順番を並び替えた後

var myArray = []; 

var item1 = { 
    start: '08:00', 
    end: '09:30' 
} 
var item2 = { 
    start: '10:00', 
    end: '11:30' 
} 
var item3 = { 
    start: '12:00', 
    end: '14:30' 
} 
var item4 = { 
    start: '16:00', 
    end: '18:25' 
} 
var item5 = { 
    start: '19:00', 
    end: '21:25' 
} 

myArray.push(item1); 
myArray.push(item2); 
myArray.push(item3); 
myArray.push(item4); 

12:00と同じでなければなりません。

<div ng-repeat="item in $scope.myArray" | orderBy:myOrderFunction? ... 

と私はNGリピートのための上記の順序が必要になります

私はアイテムを反復するAngularJSを使用しています。 これを実行する可能性はありますか?

答えて

1

正直言って、それはかなり変です。しかし、これはそれを行う必要があります。

function wiggleTime(time) { 
    var t = 60 * parseInt(time.substr(0, 2), 10) + parseInt(time.substr(3), 10); 
    return (t >= 720) ? 2160 - t : t; 
} 

function wiggleComparator(a, b) { 
    var aa = wiggleTime(a.start); 
    var bb = wiggleTime(b.start); 
    return aa - bb; 
}; 
console.log(myArray.sort(wiggleComparator).map(function(o) { return o.start; })); 
// ["08:00", "10:00", "19:00", "16:00", "12:00"] 

が、それはよりパフォーマンスにするには、時間を-ウィグルに事前及び構造にそれを保存するので、あなたは、各テストのペアごとに要素ごとに一度だけ、それを小刻みではなく、二回でした。

+0

ありがとうございます!また、それをangularJSの** ng-repeat **と一緒に使う方法も知っていますか?ありがとう! – quma

+0

申し訳ありません、角度のある人は自分ではありません。しかし、 'wiggleComparator'関数を[カスタムコンパレータ](https://docs.angularjs.org/api/ng/filter/orderBy#using-a-custom-comparator)として機能させることは効果的です)。 – Amadan

0

私はあなたのコードで

myArray.sort(関数(B){
IF(a.start.splitを(ソート機能を追加有し ':')[0]> = 12)
戻り値a.start.split( ':')[0] + b.start.split( ':')[0];
else
戻り値a.start.split( ':')[0] - b.start.split( ':')[0]
});

 <div ng-app> 
     <div ng-controller="TodoCtrl"> 
     <div ng-repeat="item in myArray" > 
      {{item.start}} 
     </div> 
     </div> 
     </div> 

function TodoCtrl($scope) { 
    var myArray = []; 

    var item1 = { 
    start: '08:00', 
    end: '09:30' 
    } 
    var item2 = { 
     start: '10:00', 
     end: '11:30' 
    } 
    var item3 = { 
     start: '12:00', 
     end: '14:30' 
    } 
    var item4 = { 
     start: '16:00', 
     end: '18:25' 
    } 
    var item5 = { 
     start: '19:00', 
     end: '21:25'  
    } 

    myArray.push(item1); 
    myArray.push(item2); 
    myArray.push(item3); 
    myArray.push(item4); 
    myArray.push(item5); 
    myArray.sort(function(a, b) { 
    if(a.start.split(':')[0]>=12) 
     return a.start.split(':')[0] + b.start.split(':')[0]; 
    else 
    return a.start.split(':')[0] - b.start.split(':')[0] 
    }); 
    $scope.myArray=myArray; 
    } 
+0

@ user3318489、このコードはng repeatで動作します –

関連する問題