2017-08-25 44 views
0

這裏是我的代碼:的Javascript正從HTML文本與層次

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

仍然,你這樣做。您[可能]需要將它設置爲函數本地,而不是全局變量。目前,有一個'label'變量在函數的所有調用中共享,並且每次舊值被覆蓋。 –

回答

0

方式一:

  1. 創建標籤鍵的對象,並指定相應的權重。

  2. 推該對象到數組

  3. 使用自定義排序

//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

我想我必須只使用一個經過元素的簡單的解決方案,沒有必要sort()或map():

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); 
}