gpt4 book ai didi

javascript - 如何仅调用此函数一次并根据需要循环?

转载 作者:行者123 更新时间:2023-12-02 15:43:06 25 4
gpt4 key购买 nike

我有一个 Chrome 扩展程序,可以替换网页上的某些短语。它使用二维数组。 [i][1] 替换 [i][0] 值中提供的文本。

for (var i = 0; i < array.length; i++) {
findAndReplaceDOMText(document.body, {
preset: 'prose',
find: array[i][0],
replace: array[i][1]
});
}

这段代码工作正常,但计算量似乎很大,因为它多次调用 findAndReplaceDOMText 函数,而不是一次。是否可以将 for 循环移到函数内部以仅包装 findreplace 参数?如果是的话那会是什么样子?我只能在尝试此操作时收到控制台错误。

编辑:该函数遍历 DOM,查找所有可见的人类可读文本,其中包含 find 中提供的正则表达式短语,并替换为 replace 中提供的字符串。

最佳答案

如果不修改函数的行为,您就无法做到这一点。您可以做的是将查找和替换过程分开。

你的字符串以一种难以横向的方式存储,所以让我们把它们展平:

var flatFind = array.map(function(elem){
return elem[0]
})

var flatReplace = array.map(function(elem){
return elem[1]
})

然后,您需要创建一个包含所有搜索字符串的正则表达式字符串:

var searchString = "/("+flatFind.join("|")+")/g"

然后将其传递给函数,使用函数查找匹配的索引:

findAndReplaceDOMText(document.body, {
preset: 'prose',
find: searchString,
replace: function(portion, match){
var idx = flatFind.indexOf(match)
if(idx > -1) return flatReplace[idx]
else throw "hey, there's no replacement string for this!"
}
})

关于javascript - 如何仅调用此函数一次并根据需要循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32429008/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com