2015-11-07 4 views
1

Я застрял в поиске способа консолидации элементов массива.Javascript, консолидировать элементы массива

поэтому мой массив находится в формате [id1: port1, id2: port2, id1: port3, id2: port4, id5: port5 ...] где каждый элемент имеет 2 части. Часть id не уникальна. что я пытаюсь объединить, чтобы создать новый массив будет иметь данные, такие как [id1 # port1: port3, id2 # port2: порту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 .. .] to [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); 
}) 

Это не гарантирует, что окончательный массив будет отсортирован, но вы можете отсортировать его самостоятельно, если вы хотите.

Смежные вопросы