2015-11-07 74 views
1

我被困在找到一種方法來鞏固數組元素。Javascript,鞏固數組元素

所以我的數組格式爲[id1:port1,id2:port2,id1:port3,id2:port4,id5:port5 ...]其中每個元素有2個部分。 id部分不是唯一的。我怎麼努力,鞏固是創建一個新的陣列將擁有像數據ID 1#端口1:端口3,ID2#端口2:端口4,ID5#PORT5]

我想下面的代碼,但它並沒有讓我太遠。任何古魯都能幫助我嗎?

var orinString = "id1:port1,id2:port2,id1:port3,id2:port4,id5:port5"; 
 

 
var newArray1 = orinString.split(","); 
 
var newArray2 = orinString.split(","); 
 
var newArray3 = []; 
 

 
for (x=0; x<=newArray1.length-1; x++) { 
 
    for (y=0; y<= newArray2.length-1; y++) { 
 
    if ((newArray1[x].split(":")[0] == newArray2[y].split(":")[0]) && (newArray1[x].split(":")[1] != newArray2[y].split(":")[1])) { 
 
     newArray3.push(newArray1[x].split(":")[0] +"#"+ newArray1[x].split(":")[1]); 
 
    } 
 
    } 
 
} 
 

 
for (z=0; z<=newArray3.length; z++) { 
 
    gs.log("show me the result " +newArray3[z]); 
 
}

+0

你所說的 「整合」 是什麼意思? –

+0

也許我應該使用字操作,對不起,我真的不知道適當的術語,但我想從原始格式[id1:port1,id2:port2,id1:port3,id2:port4,id5:port5 .. 。]到[id1#port1:port3,id2#port2:port4,id5#port5] –

回答

1

難道是你想要的:

var orinString = "id1:port1,id2:port2,id1:port3,id2:port4,id5:port5"; 
var arr1 = orinString.split(","); 
var temp= ""; 
var newStr = ""; 
arr1.sort(); 
for(i=0; i< arr1.length; i++) { 
    var item = arr1[i].split(':'); 
    if(item[0] !== temp || temp === "") { 
     newStr += "," + item[0] + "#" + item[1]; 
    } else { 
     newStr += ":"+item[1]; 
    } 
    temp = item[0]; 
} 
console.log(newStr.substring(1)); 
+0

這就是我正在尋找的。謝謝! –

0

解決的一個問題是這樣的

  • 將它們轉換成可操作的價值
  • 填充某種查找表的
  • 輸出結果的典型方式此查詢表

例如

var orinString = "id1:port1,id2:port2,id1:port3,id2:port4,id5:port5"; 

var idsAndPorts = orinString.split(","); 

// Populate a key lookup 
var hashTable = {}; 
idsAndPorts.forEach(function(s) { 
    var splitValue = s.split(':'); 
    var key = splitValue[0]; 
    var value = splitValue[1]; 
    if(hashTable[key]) { 
    hashTable[key].push(value); 
    } else { 
    hashTable[key] = [value]; 
    } 
}); 

// Now convert it back into an array again 
var finalArray = []; 
for(var k in hashTable) { 
    finalArray.push(k + '#' + hashTable[k].join(',')); 
} 

// View the results 
finalArray.forEach(function(f) { 
    console.log(f); 
}) 

這並不能保證最終的陣列將被排序,但你可以,如果你想自己的排序。