我正在寻找一种用于更改句子的多个位置的文本的算法。 例如,我们有下一个文本:
丽贝卡布莱克周五赚了多少钱?
所以,我有一个对象,它包含两个需要更改的位置:
[{
offset: 19,
length: 13
}, {
offset: 45,
length: 6
}]
Rebecca Black 和 Friday 需要替换为相同或不同的文字...让我们说树屋 ...没有'真的很重要......
所以我的句子应该是这样的 * Treehouse 从树屋赚了多少钱?*
我到目前为止的解决方案是向后运行并逐个替换文本。它将确保正确分配职位,但这有点复杂。
有什么想法吗?
答案 0 :(得分:2)
首先,您可以按sort
字段offset
数组,然后只需将替换的函数应用于所需的string
。
为什么要排序?
因为在这个问题上我们可以从字符串的end
替换为此字符串的start
。
如果没有,那么我们可能会遇到问题:如果我们用小文本替换长文本会发生什么?
然后可能offsets
超过字符串长度。
注意:该解决方案并不能保证我们不会拥有
给定字符串的超越(如果偏移量超过给定字符串的长度),但没有than
给定数组的解决方案sorting
更好let string='How much money has Rebecca Black made off of Friday?';
const replaceRange = (s, start, end, substitute) => s.substring(0, start) + substitute + s.substring(end);
let array=
[{
offset: 19,
length: 13
}, {
offset: 40,
length: 2
}];
array.sort(function(a,b){
return b.offset-a.offset;
}).forEach(function(item){
string=replaceRange(string,item.offset,item.offset+item.length,"XX");
});
console.log(string);
/强>
{{1}}
答案 1 :(得分:1)
Kevin=10.1
答案 2 :(得分:1)
从技术上讲,这可以解决问题,但是样本数据会重叠。我只是用不同的数据来证明它有效。
var data = "How much money has Rebecca Black made off of Friday?".split('');
replace = [{
offset: 19,
length: 13
}, {
offset: 0,
length: 3
}];
replace.forEach(function(el) {
data.forEach(function(dataElement, index) {
if (index >= el.offset && index < (el.offset + el.length))
data[index] = "X";
})
})
data = data.join('');
console.log(data);
&#13;