У меня есть массивы, как это:JavaScript: функция не изменяя фактический массив
[ 'markdown', [ 'para', '\'example\'' ] ]
И у меня есть функция, которая находит рекурсивно строки внутри этих массивов:
function traverse(tree, callback) {
for (var i = 0; i < tree.length; ++i) {
if (_.isArray(tree[i]) || _.isObject(tree[i])) {
traverse(tree[i], callback)
} else {
callback(tree[i])
}
}
}
Проблема в том, когда Я выполняю такие задачи, как replace
, что заменяется не фактическим массивом, а только копиями его узлов. Пример:
function replaceQuotes(tree, callback) {
traverse(tree, function(node) {
node = node.replace(/'/g, '"')
console.log(node)
// outputs: "example"
})
callback(null, tree)
}
function showResult(err, tree) {
console.log(tree)
// outputs [ 'markdown', [ 'para', '\'example\'' ] ]
}
Как я могу это сделать, так что я могу изменить фактические массивы с функцией transverse
?
(Кстати, я использую модуль Async Node.js.)
Это потому, что в настоящее время вы работаете со строками в массиве и больше не сам массив, а строки передаются только по значению, а не копия ссылки значения и т. д. – adeneo
[строки Javascript неизменяемы] (http://stackoverflow.com/questions/51185/are -javascript-strings-immutable-do-i-need-a-string-builder-in-javascript) –
Я думаю, вы имеете в виду 'traverse' – Tom