javascript - Obține o linie într-un șir la un anumit offset


Am un șir prin care trec caracter cu caracter. Știu decalajul caracterului în șir, dar nu știu linia.

Ceea ce aș dori să fac este să obțin textul unui rând la un anumit decalaj. Cum pot face acest lucru?

I like to 
eat pizza
do you?

Pentru exemplul de mai sus, dacă vreau linia de la offset 15 aș obține următoarea linie mănânc pizza.

Răspuns #1

Poți încerca acest cod.

Ceea ce face este să parcurgă fiecare caracter din fiecare linie, scăzând offset până când ajunge la 0. Apoi afișează linia pe care se află.

function getLine(str, off) {
  var lines = string.split("\n");
  for(line in lines)
    for(var i = 0; i < lines[line].length; i++)
      if(--off == 0)
        return lines[line];
}

var string =
`I like to 
eat pizza
do you?`;
console.log(getLine(string, 15));

Răspunsul #2

Iată implementarea mea (https://jsfiddle.net/Lgb3qncu/1/):

function findLine(str, idx) {
  var first = str.substring(0, idx);
  var last = str.substring(idx);

  var firstNewLine = first.lastIndexOf("\n");

  var secondNewLine = last.indexOf("\n");

  if ( secondNewLine == -1 ) {
    secondNewLine = last.length;
  }

  return str.substring(firstNewLine+1, idx+secondNewLine);
}


var str =
`I like to 
eat pizza
do you?`;
console.log(findLine(str, 15));