2016-12-29 4 views
0

У меня есть хеш-таблица, содержащая значения под двумя главными клавишами: Subject и Query. Каждый Query может иметь несколько Subject.Добавление строк в правильном порядке

Например

Query-blabla, Subject1-12, Subject2=13 

Я пытаюсь построить строку, содержащую каждый Query своих предметов, и оно должно быть отделено запятой ,, так что я могу вставить его в файл CVS, по coulmns.

Все отлично работает, единственная проблема, с которой я сталкиваюсь, - с жирной линией.

Теперь это выглядит примерно так:

subject,subject,query,subject,,subject,subject,query,subject,,subject... 

Она должна быть:

subject, subject, query 
subject,subject, query etc... 

Я следующий код

for (var k = 0; k < keyToGeneDetailMappingGroupArray.length; k++) 
{ 

    var isGroupContained = keyToGeneDetailMappingGroupArray[k].hasItem(currentKey); 

    if (isGroupContained) 
    { 
     //Not relevent: Watch the data structures: sumElements += keyToGeneDetailMappingGroupArray[k].getItem(currentKey).length; 
     sumElements += 1; 

     linescontentSubject = keyToGeneDetailMappingGroupArray[k].items[currentKey][0].Subject; 
     linescontentQuery = keyToGeneDetailMappingGroupArray[k].items[currentKey][0].Query; 

     databegin = linescontentQuery + "," + linescontentSubject; 

     if(dataAll.includes(linescontentQuery)) 
     { 
      dataAll = linescontentSubject + "," + dataAll + ","; 
     } //this is the problem// 
     else 
     { 
      dataAll = dataAll + databegin + "\r"; 
     } 

     index += Math.pow(2, k); 
    } 
} 
+0

Можете ли вы включить хотя бы образец хеш-таблицы? –

+0

Я думаю, что вам нужно объяснить это немного лучше. Это поможет, если вы приведете пример ввода и пример вывода – Emiliano

+1

. Думаю, ваша проблема заключается в том, что вы только конкатенируете '' \ r'' в конце строки, но вы должны конкатенировать '' \ r \ n''. – dloeda

ответ

0

Похоже, что вам нужно отделкой передняя запятая, прежде чем завершить линию.

else { 
    dataAll = dataAll.substring(0, dataAll.length - 2); 
    dataAll = dataAll + databegin + "\r"; 
} 

Альтернатива, один это более кратким, является использовать массив вместо конкатенации и закончить с помощью метода присоединиться массива.

var dataLine = []; 

for (var k = 0; k < keyToGeneDetailMappingGroupArray.length; k++){ 
    var isGroupContained = keyToGeneDetailMappingGroupArray[k].hasItem(currentKey); 

    if (isGroupContained){ 
     //Not relevent: Watch the data structures: sumElements += keyToGeneDetailMappingGroupArray[k].getItem(currentKey).length; 
     sumElements += 1; 

     linescontentSubject = keyToGeneDetailMappingGroupArray[k].items[currentKey][0].Subject; 
     linescontentQuery = keyToGeneDetailMappingGroupArray[k].items[currentKey][0].Query; 

     databegin = linescontentQuery + "," + linescontentSubject; 

     if(dataLine.includes(linescontentQuery)){ 
      dataLine.splice(0, linescontentSubject); 
     } 
     else { 
      dataAll = dataLine.join(',') + databegin + "\r"; 
      dataLine = []; //reset the dataline 
     } 

     index += Math.pow(2, k); 
    } 
} 
Смежные вопросы