【问题标题】:Algorithm of replacing line indexes替换行索引的算法
【发布时间】:2019-05-05 01:51:12
【问题描述】:

一般:

我有一条短信

Sample1 Text1 Line 1
Sample2 Text2 Line 2
Sample3 Text3 Line 3

还有一个数组['LEFT', 'RIGHT', 'CENTER'],它代表了对齐方式..

假设,我删除了Line 1 Sample2,这使得文本成为:

Sample1 Text1 
Text2 Line 2
Sample3 Text3 Line 3

对齐数组应该保持不变:['LEFT', 'RIGHT', 'CENTER'] 但是,如果我删除第二行,数组应该更改为 ['LEFT','CENTER']

反之亦然...当在第 1 行和第 2 行之间添加一行时,它应该通过从“扩展”行中获取对齐来将数组更改为 ['LEFT', 'LEFT', 'RIGHT', 'CENTER']...

是的...我知道...令人困惑...

https://jsfiddle.net/redlive/yuz08axc/

【问题讨论】:

  • 我不需要添加\n...这就是重点...当文本更改时,我需要重新构建文本对齐并根据新值应用它们。

标签: javascript algorithm text alignment


【解决方案1】:

你想要这个

let text = 'a\nb\nc\n'
const textAsArray = text.split('\n')
const alignments = ['left', 'right', 'center']

// initial
console.log('initial state:', text, alignments)

// remove second line
removeLine(1)
console.log('removed second line:', text, alignments)


// add second line
addLine(1, 'b')
console.log('added second line:', text, alignments)

function removeLine(num) {
  textAsArray.splice(num,1)
  alignments.splice(num,1)
  text = textAsArray.join('\n')
}


function addLine(num, val) {
  textAsArray.splice(num, 0, val)
  alignments.splice(num, 0, alignments[num ? num - 1 : 'left' /* left is default */ ])
  text = textAsArray.join('\n')
}

【讨论】:

  • 不完全...您所做的是操作对齐数组,然后是文本,但我需要它根据文本更改工作...一旦您更改了文本 - 重建对齐数组。跨度>
  • 我向您展示了一般原则。写整个东西是需要资源的,Stackoverflow 不是关于那个,而是关于给出一个方向。整个事情可能非常复杂。如果您想知道删除或添加了哪一行,也应该涉及字符串差异库。例如this。在你设法实现 string-diff 之后,你几乎可以直接插入我的代码。如果我的回答有帮助/正确,请考虑对其进行投票并选择最佳,因为我花了很多时间,你知道。我想我已经按原样回答了这个问题。
  • Nubor,谢谢,但这不是我想要的解决方案……抱歉……
  • @EugeneVilder 有趣的是,点赞和选择不会让你付出任何代价(实际上你会得到 +2 分),但你表现得如此吝啬。最后,我已经按照布局回答了您的问题,但事实证明您的格式不正确。
猜你喜欢
  • 1970-01-01
  • 2013-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 2015-10-05
  • 1970-01-01
相关资源
最近更新 更多