在每100个字符的最近空间的String中添加一个新行

时间:2017-01-17 04:12:38

标签: javascript google-sheets

我正在为我的gelato制造公司编写生产系统的后端编码,而且自从大学一年级以来我一直没有使用Javascript。基本上,myString是从我们的订购系统导入的Google表格中的成分列表。它通常很长,需要拆分标签软件。我需要将所有myString保留在一个单元格中,但是每100个字符都有一个新行(或CTRL输入),但它必须位于一个空格中。这是我所拥有的,但它不会超过第一次出现。

function insertNewLine(myString) {
    var ret = [];
    var i;
    var len;
    var n = 100;
    var currentString = myString.substr(i,n);
    var character = String.fromCharCode(10);

    for(i = 0, len = myString.length; i < len; i += 100) {

    var before = currentString.lastIndexOf(' ', n);
          n = before;

      ret.push(currentString + character);
      currentString = myString.substr(n, n+100);
      n=100;      
    }

    return ret;
}

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

首先拆分为单词数组并迭代该数组以构建新字符串

的方法

&#13;
&#13;
var str = "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum."

var lineBreak = '\n',
  words = str.split(' '),
  newStr = words.shift(),
  charCount = newStr.length;

words.forEach(function(word, i) {
  charCount += word.length + 1;
  if (charCount <= 100) {
    newStr += ' ';
  } else {
    newStr += lineBreak;
    charCount = word.length
  }
  newStr += word;
});
// demo only to show line lengths
var lines= newStr.split(lineBreak).map(function(str){
   return str.length
})
document.getElementById('res').value = newStr;
document.getElementById('lengths').innerHTML = JSON.stringify(lines);
&#13;
<h3>line lengths</h3>
<pre id="lengths"></pre>
<h4>new Text</h4>
<textarea id="res" style="width:100%; height:300px"></textarea>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

我做了一些重构并添加了一些测试以确保它正常工作。

这里是JSBin:http://jsbin.com/xoheqey/1/edit?js,console

这里有更新版本:

function insertNewLine(myString) {
    var output = myString;
    var i;
    var len = myString.length;
    var n = 100;
    var newLine = String.fromCharCode(10);

    // Do not add new line if less than 100 characters long.
    if ( len < 100 ) {
      return myString;
    }

    for( i = 0; i < len; i += 100) {
      // if over hundred characters left
      if ( (len - i) >= n ) {
        var lastHundrethSpace = output.lastIndexOf(' ', n+i);
        output = output.splice(lastHundrethSpace, 0, newLine);
      }
    }
    return output;
}

这应该有用,请告诉我是否存在问题!