每当换行(↵)字符存在时展开数组

时间:2018-09-12 03:34:16

标签: javascript arrays newline

我试图在每次换行符出现时扩展数组,但似乎无法弄清楚。我正在获取文本区域的内容,并根据每个tab的出现位置创建一个数组。

我创建了一个名为lines的4元素数组,如下所示:["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 :(得分:0)

arr.flatMap(s => s.split(/(↵)/)).filter(x => x.length)
# => ["A widget:", "↵", "X component;", "↵", "Y component; and", "↵",
#     "Z component.", "↵", "↵"]

split在定界符上分割;但如果正则表达式中有捕获组,它也会在split数组中产生定界符。使用flatMap,我们将所有字符串拆分并将所有结果连接到一个数组中。但是,如果定界符是在字符串的开头或结尾,那么我们将在其中得到一个空段,因此在filter的末尾将其删除。

这是假设您具有“弯角向下箭头”(U + 21B5),而不是“线路进给(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)

答案 1 :(得分:0)

您可以结合使用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)