Расширяйте массив каждый раз, когда существует символ новой строки (↵) - PullRequest
0 голосов
/ 12 сентября 2018

Я пытаюсь расширять массив каждый раз, когда появляется символ новой строки, но я не могу понять это.Я получаю содержимое текстовой области и создаю массив, основанный на том, где происходит каждый tab.

Я создаю с помощью массива из 4 элементов с именем lines следующим образом: ["A widget:↵", "X component;↵", "Y component; and↵", "Z component.↵↵"]

В конечном итоге я хочу массив из 9 элементов, подобный этому: ["A widget:", "↵", "X component;", "↵", "Y component; and", "↵", "Z component.," "↵", "↵"]

Мой текущий код такой:

for(var i = 0; i < lines.length; i++){
      var newlinehere = lines[i].indexOf("\n");
          if (newlinehere > 0){
                lines.splice(newlinehere, 0, "NEWLINEHERE");
          }
}

Я не могу найти , чтобы знать, где сращивать массив,"\ n" не работает.

Есть какие-нибудь мысли о том, как сделать эту работу?

РЕДАКТИРОВАТЬ: я отредактировал свой комментарий, чтобы исправить мой оригинальный код.Сначала я ошибся.

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Вы можете использовать комбинацию методов Array.map() и Array.concat() для разделения и выравнивания окончательного массива.

var items = [ "item1\n", "item2\n\n", "item3" ]

var items2 = items.map(function(item){
  
  return item.split("\n");
})

var flatten = [].concat.apply([], items2)

console.log(flatten)
0 голосов
/ 12 сентября 2018
arr.flatMap(s => s.split(/(↵)/)).filter(x => x.length)
# => ["A widget:", "↵", "X component;", "↵", "Y component; and", "↵",
#     "Z component.", "↵", "↵"]

split разделяется на разделитель;но если внутри регулярного выражения есть группа перехвата, она также выдаст разделители в массиве split.С flatMap мы разделяем все строки и объединяем все результаты в один массив.Однако, если разделитель был в начале или в конце строки, мы получим там пустой сегмент, поэтому в конце filter избавится от них.

Это предполагает, что у вас есть 'СТРЕЛКА ВНИЗ со СТРЕЛКАМИ УГЛА (U + 21B5), а не «LINE FEED (LF)» (U + 000A) или «Возврат каретки (CR)» (U + 000D).Если у вас есть один из последних, замените на \n или \r, в зависимости от ситуации.(Было бы также гораздо понятнее, если бы вы написали ["A widget:\n", "X component;\n", "Y component; and\n", "Z component.\n\n"])

РЕДАКТИРОВАТЬ: flatMap еще не доступен на всех платформах;Вы можете использовать это вместо:

[].concat(...arr.map(s => s.split(/(↵)/))).filter(x => x.length)
...