这是专门针对JavaScript的。
假设我有一个字符串"cat dog cat"
,我必须用"1"
替换字符0-2和8-10,用"2"
替换字符4-6,结果为{{ 1}}。
我只知道我要替换的范围 - 我不知道他们的内容
我知道我要用什么替换每个范围,我知道开始的范围,但是如果我替换第一个范围,其他一切的位置都会发生变化,这意味着任何进一步的替换都会影响错误的索引。
我如何正确地进行更换?
答案 0 :(得分:1)
您可以使用Array#reduce
并迭代所有字符,并决定是否替换,删除或使用该字符。
var string ="cat dog cat",
replace = [{ value: '1', from: 0, to: 2 }, { value: '1', from: 8, to: 10 }, { value: '2', from: 4, to: 6 }],
result = string.split('').reduce(function (r, a, i) {
return replace.some(function (b) {
if (i >= b.from && i <= b.to) {
if (i === b.from) {
r += b.value;
}
return true;
}
}) ? r : r + a;
}, '');
console.log(result);
&#13;
答案 1 :(得分:0)
使用临时“存根”(null
值)来保留初始位置并使用Array.splice
函数进行所需的插入:
var str = "cat dog cat", chars = str.split(""),
// predefined ranges (v - replacing value, r - range of positions)
ranges = [{v: 1, r: [0,2]}, {v: 2, r: [4,6]}, {v: 1, r: [8,10]}];
ranges.forEach(function(o){
chars.splice(o.r[0], (o.r[1] - o.r[0]) + 1); // removing elements starting from specified index
chars.splice(o.r[0], 0, o.v, null, null); // filling with stubs
});
chars = chars.filter(function(v){ return v !== null; }).join("");
console.log(chars); // "1 2 1"