Эта функция перебирает JavaScript вложенных массивов (рекурсивно) и заменяет строки внутри них: примерJavaScript: Аргументы с более чем одним значением
function replaceRecur(tree, str, newStr) {
for (var i = 1; i < tree.length; i++) {
if (Array.isArray(tree[i])) {
replaceRecur(tree[i], str, newStr)
} else {
tree[i] = tree[i].replace(str, newStr)
}
}
}
Использование:
function replaceQuotes(tree, callback) {
var str1 = /"(?=\b)/g
, str2 = /"(?!\b)/g
, newStr1 = '“'
, newStr2 = '”'
replaceRecur(tree, str1, newStr1)
replaceRecur(tree, str2, newStr2)
callback(null, tree)
}
Как я должен изменить replaceRecur
поэтому я допускаю два значения для аргумента?
Пример:
function replaceQuotes(tree, callback) {
var str = ['/"(?=\b)/g/', '"(?!\b)/g']
, newStr = '“ ”' // not sure whether to use arrays or strings
// what's more common?
replaceRecur(tree, str, newStr)
callback(null, tree)
}
(.. Причина в том, я не хочу повторять replaceRecur
, str
и newStr
дважды я хочу, чтобы сохранить код DRY)
EDIT:
Пример ввода (на всякий случай):
[ 'markdown',
[ 'para', '“a paragraph”' ],
[ 'hr' ],
[ 'para', '\'another paragraph\'' ],
[ 'para', 'test--test' ],
[ 'para', 'test---test' ],
[ 'bulletlist',
[ 'listitem', '“a list item”' ],
[ 'listitem', '“another list item”' ] ] ]
Я думаю, что ваш код уже сух. Вы не повторяетесь, вы вызываете функцию несколько раз с разными аргументами? Если вообще использовать цикл в 'replaceQuotes'. – Bergi
Я с @Bergi, просто вызов функции дважды не означает, что вы повторяете себя. И добавление сложности к простой функции, чтобы избежать этого, не обязательно является хорошей идеей. –
@ Bergi Не могли бы вы привести пример? – alexchenco