2016-09-27 33 views
2

結果我有這樣的jQuery的變種STR字符串如下:jQuery的邏輯來得到字符串

var str = 4-68,4-69,4-70,5-86,5-87,5-88,5-89,5-91,6-100,6-101 

現在我想組織字符串,得到的結果類似以下內容:

var result = 4(68,69,70)|5(86,87,88,89,91)|6(100,101) 

這似乎並不難。但我無法完全確定代碼中的邏輯。

var dataRecord = '4-68,4-69,4-70,5-86,5-87,5-88,5-89,5-91,6-100,6-101'; 
var i = 1; 
var first_item = []; 
var second_item = []; 
var final_item = []; 
var agree_ref_data = dataRecord.agreement_ref_no; 
var main_arr = agree_ref_data.split(','); 
for (i = 0; i < main_arr.length; ++i) { 
    var second_arr = main_arr[i].split('-'); 

    if (jQuery.inArray(second_arr[0], first_item) == -1) { 
     first_item.push(second_arr[0]); 
     //second_item.push(second_arr[1]); 
    } 

    if (jQuery.inArray(second_arr[0], first_item) !== -1) { 

     second_item.push(second_arr[1]); 

    } else { 
     final_result = second_item; 
     //second_item=[]; 
    } 

} 
return final_result; 

} 

我怎樣才能得到我想要的結果?

回答

2

以下是純js.Jo所需的代碼。我們首先用逗號分割字符串,然後迭代結果數組,再用' - '分割。然後將值存儲爲一個Map(爲此使用普通的js對象)。 Rest只是迭代對象的關鍵值對並按摩數據。

var dataRecord = '4-68,4-69,4-70,5-86,5-87,5-88,5-89,5-91,6-100,6-101'; 
var a = dataRecord.split(','); 
var obj = {}; 
for(var i=0;i<a.length;i++){ 
    var tmp = a[i].split('-'); 
    if(typeof obj[tmp[0]] !== 'object'){ 
    obj[tmp[0]] = []; 
    } 
    obj[tmp[0]].push(tmp[1]); 
} 
var result = ''; 
for (var key in obj) { 
    if (obj.hasOwnProperty(key)) { 
    console.log(key + " -> " + obj[key]); 
    result = result + key + '(' + obj[key].join() + ')|'; 
    } 
} 
result = result.substr(0,result.length-1); // removing the last | character 
1

完整的工作代碼命題(不需要的jquery):

var str="4-68,4-69,4-70,5-86,5-87,5-88,5-89,5-91,6-100,6-101"; 
 

 
//##1 . Split by , 
 

 
//we have array of elements like 4-68 
 
var arr=str.split(","); 
 

 
//results temporary object 
 
var results={}; 
 

 
//##2 .Create temporary object 
 

 
for (var el in arr){ 
 

 
    //we have parts as [4, 68] 
 
    var parts=arr[el].split("-"); 
 
    var main=parts[0]; 
 
    var second=parts[1]; 
 
    
 
    if (!results.hasOwnProperty(main)){ 
 
     
 
     results[main]=second;//create new string for this main 
 
     
 
    }else //element with main exists so add next number 
 
    results[main]+=","+second;//concat to string 
 
    
 
} 
 

 
console.log("Temporary object structure:"); 
 
console.log(results); 
 

 
//ok we have array with results but we need string 
 
var resultsStr=""; 
 

 
//##3. Create final string 
 

 
for (var main in results){ 
 

 
    if (resultsStr!="") 
 
    resultsStr+="|"; //add | not for first one 
 
    
 
    resultsStr+=main+"("+results[main]+")"; //add() to our string 
 
    
 
} 
 

 
console.log("Final string:"); 
 
console.log(resultsStr);

步驟中的算法:

  1. 我通過分割陣列,
  2. 我創建臨時結構,其中我通過主數字創建屬性,它們的值是從第二個數字連接字符串
  3. 我創建基於臨時結構的字符串。

即使主號碼的順序不正確,算法也會運行。