2017-02-20 4 views
0

У меня есть несколько файлов TSV, каждый из которых имеет строку заголовка. Теперь одно имя столбца в строке заголовка: age. В нескольких файлах имя столбца: age, а в других файлах - EOL charcter, такой как .Найти индекс строки в Javascript с помощью первых трех символов

Теперь, как я могу использовать str.indexOf('age') функцию, так что я получаю индекс возраста независимо от имени столбца возраста с EOL характера, такие как \n, \r и т.д ..

Foe например: TSV file1:

Name Address Age Ph_Number 

file 2:

Name Address Age/r 

file 3:

Name Address Age\n 

Я пытаюсь найти индекс age столбца каждого файла заголовка строки.
Однако, когда я DO-

header.indexOf('age') 

это дает мне результат только в случае file1, так как в 2-х других файлов, которые мы имеем age как age\r и age\n ..

Мой вопрос, как я должен найти индекс age независимо от \r\n символ вместе с age в строке заголовка.

я следующий сценарий в настоящее время:

var headers = rows[0].split('\t'); 
    if (file.name === 'subjects.tsv'){ 
     for (var i = 0; i < rows.length; i++) { 
     var ageIdColumn = headers.indexOf("age"); 
     console.log(headers) 
+0

Не уверен, что вы просите. В случае с именем «имя возраста» вы хотите получить 1? или 5? –

+2

Не работает ли indexOf? За ним следует '\ n' или' \ r' не должно влиять на результат 'indexOf'. – SimpleJ

+7

'indexOf()' возвращает индекс, где исходная строка ** запускается ** в искомой строке. Он вернет тот же номер для «age», за которым следуют другие символы или нет. –

ответ

1

Как я уже говорил в комментариях, indexOf() возвращает начальную позицию строки. Это не имеет значения, что происходит после этого:

var csvFile1 = 'column1,column2,column3,age,c1r1'; 
 
var csvFile2 = 'column1,column2,column3,age\r,c1r1'; 
 
var csvFile3 = 'column1,column2,column3,age\n,c1r1'; 
 

 
console.log(csvFile1.indexOf("age")); 
 
console.log(csvFile2.indexOf("age")); 
 
console.log(csvFile3.indexOf("age"));

Если вы специально хотите найти варианты со специальными символами, просто посмотрите на них в явном виде:

var csvFile4 = 'column1,age\r,column2,column3,age\n,c1r1'; 
 
console.log(csvFile4.indexOf("age\r")); 
 
console.log(csvFile4.indexOf("age\n"));

Наконец, возможно, это вы смущены относительно того, что должно делать именно indexOf(). Он не должен сообщать вам, где все вхождения данной строки. Он перестает смотреть после первого матча. Для того, чтобы получить все места, вы должны были бы петлю, похожее на это:

var csvFile5 = 'column1,age\r,column2,age, column3,age\n,c1r1'; 
 

 
var results = []; // Found indexes will be stored here. 
 
var pos = null; // Stores the last index position where "age" was found 
 

 
while (pos !== -1){ 
 
    // store the index where "age" is found 
 
    // If pos is not null, then we've already found age earlier and we 
 
    // need to start looking for the next occurence 3 characters after 
 
    // where we found it last time. If pos is null, we haven't found it 
 
    // yet and need to start from the beginning. 
 
    pos = csvFile5.indexOf("age", pos != null ? pos + 3 : pos); 
 
    pos !== -1 ? results.push(pos) : ""; 
 
} 
 

 
// All the positions where "age" was in the string (irrespective of what follows it) 
 
// are recorded in the array: 
 
console.log(results);

+0

Perfect .. Но если у меня есть заголовки в массиве и вы хотите найти headers.indexOf ('age'), то его не работает. – learnningprogramming

+0

Мне нужно пересмотреть свой вопрос. У меня не было полной проблемы. новый для javascript. – learnningprogramming

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