2017-08-25 6 views
0

とHTMLからテキストを取得するには、私のコードです:Javascriptがここ階層

var label; 
$('.card-label.mod-card-detail ').each((index, element) => { 
    text = $(element).text().toUpperCase(); 
    switch(text){ 
     case "CODE REVIEW": 
      label = text; 
      break; 
     case "HOTFIX": 
      if(label !== "CODE REVIEW") label = text; 
      break; 
     case "BUG": 
      if(label !== "CODE REVIEW" && label !== "HOTFIX") label = text; 
      break; 
     case "FEATURE": 
      if(label !== "CODE REVIEW" && label !== "HOTFIX" && label !== "BUG") label = text; 
    } 
}) 

私は、htmlファイルからラベル名を取得しています。ラベル階層を適用する必要があります:CODE REVIEW -> HOTFIX -> BUG -> FEATUREこのコードをよりクリーンでより効果的にする方法はありますか?それをやっての

+1

この 'label'であなたは何をしますか?現在のところ、すべての反復でそれが現われているように、以前の値を上書きするため、無駄になります。 –

+0

コードが編集されました。すべての繰り返しで上書きしません。 – Borbat

+0

まだあります。おそらくグローバル変数ではなく、関数に対してローカルにする必要があります。現在、関数のすべての呼び出しで共有され、古い値が上書きされるたびに1つの 'label'変数があります。 –

答えて

0

一つの方法:

  1. ラベルキーを持つオブジェクトを作成し、対応する重みを割り当てます。

  2. プッシュ配列にこのオブジェクト

  3. 使用カスタムソート

私はちょうど1の要素を通過使って簡単に解決策を持っていると思う

//Label texts : CODE REVIEW -> HOTFIX -> BUG -> FEATURE 
 
//Corresponding weights : 4 -> 3 -> 2 -> 1 
 

 

 
// decalre array 
 
var labelArr = []; 
 
//push objects in switch case to this array 
 
var labelText = { 
 
    text: 'CODE REVIEW' , 
 
    weight: 4 
 
}; 
 
var labelText1 = { 
 
    text: 'HOTFIX' , 
 
    weight: 3 
 
}; 
 
var labelText2 = { 
 
    text: 'BUG' , 
 
    weight: 2 
 
}; 
 
labelArr.push(labelText); 
 
labelArr.push(labelText1); 
 
labelArr.push(labelText2); 
 

 

 

 
labelArr.sort(
 
      function(x, y) 
 
      { 
 
      return y.weight - x.weight ; 
 
      } 
 
     ); 
 
// Teatr White White 023 White flower 
 
console.log(labelArr); 
 
var finalLabel = labelArr.map(function(a) {return a.text;}); 
 
document.write(finalLabel.join('->'));

0

、不要のためソート()またはマップ():

var labels = ['FEATURE', 'BUG', 'HOTFIX', 'CODE REVIEW'], 
    priority = -1; 

$('.card-label.mod-card-detail ').each((index, element) => { 
    let text = $(element).text().toUpperCase(), 
     current_priority = labels.indexOf(text); 

    // we found something with higher priority 
    if(current_priority > priority) { 
     priority = current_priority; 
    } 
}); 

if(priority < 0) { 
    console.log("No labels found"); 
} else { 
    let resulting_text = labels[priority]; 
    console.log("Highest priority found:", resulting_text); 
}