按字符索引将标签插入字符串

Mik*_*ike 0 javascript arrays

我有一个字符串,并且必须使用数组中的开始/结束值在字符串中插入“ div”。

var str = "this is a simple string";

var places = [{
    "start": 0,
    "end": 3
  },
  {
    "start": 9,
    "end": 15
  }];

function insert(places, str) {
  // I tryed different approaches like this:
  str = str.forEach(function(item, index) {
    var start = item.start;
    var end = item.end;
    
    var newStr = '<div>'+str[start] + '</div>' + str.slice(end);
    str = newStr;
  });
  $('.h').html(str);
  // I need to get output str as:
  // "<div>this</div> is a <div>simple</div> string"
}
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="h"></div>
Run Code Online (Sandbox Code Playgroud)

如何使用splice或foreach函数呢?

Nin*_*olz 5

您可以将其str用作单个字母的数组,并在需要的标记放置到字母的位置上循环应用。然后将所有项目连接在一起并返回字符串。

此解决方案适用于随机排序places

function insert(places, str) {
    return places.reduce(function (r, a) {
        r[a.start] = '<div>' + r[a.start];
        r[a.end] += '</div>';
        return r;
    }, str.split('')).join('');
}

var str = "this is a simple string",
    places = [{ "start": 0, "end": 3 }, { "start": 10, "end": 15 }];

console.log(insert(places, str));
Run Code Online (Sandbox Code Playgroud)

一种不减少的解决方案:

function insert(places, str) {
    var r = str.split('');
    places.forEach(function (a) {
        r[a.start] = '<div>' + r[a.start];
        r[a.end] += '</div>';
    });
    return r.join('');
}

var str = "this is a simple string",
    places = [{ "start": 0, "end": 3 }, { "start": 10, "end": 15 }];

console.log(insert(places, str));
Run Code Online (Sandbox Code Playgroud)

为了进一步阅读,您可以看一下这个答案,为什么一个字母数组可能比字符串函数更快:如何在JavaScript中的特定索引处替换字符?