2016-12-27 12 views
0

私は配列を持っているので、ステータスに基づいて、次の順序で並べ替える必要があります。つまり、failure-> warn-> completedです。 通常、ソートにはロダッシュを使用しますが、ここでは複雑な順序です。それはまた、runでソートした後にrunに従ってソートする必要があります。私はこのことをどのように始めるべきかわからない。配列の状態に基づいて配列を並べ替える方法

var arr = [{"status":"failure","name":"one","run":1}, 
{"status":"failure","name":"two","run":2}, 
{"status":"warn","name":"three","run":1}, 
{"status":"warn","name":"four","run":2}, 
{"status":"completed","name":"five","run":1}] 
+0

ちょうど提案、私が最初に別々statusIdフィールドを含めるために、配列を変更したいですこれは、あなたが望む順序で対応する整数を持っています。すなわち、失敗= 1、警告= 2、完了= 3などであり、それをソートする。 – Illuminati

+0

あなたの提案をThakk、同じことを行うことでそれを解決しました。 – user3840211

答えて

0

このようなものはありますか?

  1. ソートキーに追加のプロパティを追加します。
var arrnew = arr.map(function(item){ 
    switch(item.status){ 
    case "failure": 
    item.statusId=1; 
    break; 
    case "warn": 
    item.statusId=2;} 
    //... 
    return item}); 
その

_.sortBy(arrnew、 'statusId')を用いて

  • ソート。

  • 0

    「状態」に基づいてソートし、次にサブスライス1または2「を実行します」によって:

    let status_vals = [ "failure", "warn", "completed" ]; 
    
    let arr = [ 
        {"status":"failure","name":"one","run":1}, 
        {"status":"failure","name":"two","run":2}, 
        {"status":"warn","name":"three","run":1}, 
        {"status":"warn","name":"four","run":2}, 
        {"status":"completed","name":"five","run":1} 
    ]; 
    
    function sortIt (status_arr, sort_arr) { 
    
        let sorted_arr = []; 
        status_arr.forEach (d => { 
        let temp = arr.filter (obj => { 
         return obj.status === d; 
        }); 
    
        var length = temp.length; 
        for (var i = 0; i < length; i++) { 
         if (temp [ 0 ].run > temp [ i ].run) { 
         temp.push (temp.shift ()); 
         } 
        } 
    
        sorted_arr = [ ...sorted_arr, ...temp ]; 
        }); 
    
        return sorted_arr; 
    } 
    
    sortIt (status_vals, arr); 
    
    関連する問題