JavaScript:不修改实际数组的函数
JavaScript: Function not modifying the actual array
我有这样的数组:
[ '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
函数修改实际数组?
(顺便说一下,我正在使用异步节点.js模块。
字符串是按值传递的 - 这就是您的代码行为方式的原因。一个好的解决方案是让你的回调返回新值,然后稍微修改你的遍历:
function tranverse(tree, callback) {
for (var i = 0; i < tree.length; ++i) {
if (_.isArray(tree[i]) || _.isObject(tree[i])) {
tranverse(tree[i], callback)
} else {
tree[i] = callback(tree[i]) // changed part
}
}
}
然后,您将像这样使用它:
function replaceQuotes(tree, callback) {
tranverse(tree, function(node) {
return node.replace(/'/g, '"')
})
console.log(tree)
// outputs [ 'markdown', [ 'para', '''example''' ] ]
callback(null, tree)
}
相关文章:
- 数组函数不适用于从元素文本创建的JavaScript数组
- 如何在javascript中求解pack数组函数
- 制作一个javascript的数组函数
- 获取元素的位置并创建它的数组函数
- 茉莉花中的 SpyOn javascript 数组函数
- 自定义数组函数不接受参数
- 使用原型的自定义数组函数.新的 MyArray(1,2,3,4) 不工作
- Java 脚本随机化数组函数
- 在 Restangular 集合上使用 lodash 数组函数
- 比较数组函数返回未定义
- Javascript中嵌套for循环与数组函数的性能
- 多维数组函数在JS中不起作用
- Javascript数组函数有我看不到的错误
- 数组函数外的javascript
- 在数组/函数中循环时使用换行符
- 拼接javascript数组函数获胜't删除项目
- 为什么不'这个js数组函数不能工作
- 如何在我自己的数组原型函数中使用数组函数
- 在javascript中定义数组函数
- Jquery动态树数组函数