调用函数后如何重置全局变量
How can I reset the global variable after calling the function?
我用递归方法编写了一个函数,从嵌套数组中获取值。问题是,我无法在每次调用后重置全局变量。在这里,每次调用后,结果都被附加到以前的结果,而不是给出新的结果。我知道,全局变量没有被重置,所以数据总是会被追加。但是我不能将函数中的变量定义为它的递归调用。
我该如何避免这种情况?如有任何帮助,我们将不胜感激。
var res = [];
function getData(arr) {
if(!Array.isArray(arr)) {
res.push(arr);
return res;
}
for(var i = 0; i < arr.length; i++) {
getData(arr[i]);
}
return res;
}
getData([1, [2], [3, [[4]]]]); // res = [1, 2, 3, 4]
getData([[["a"]], [["b"]]]); // res = [1, 2, 3, 4, "a", "b"], expected is res = ["a", "b"];
getData([1, {}, [3, [[4]]]]);
但我不能将函数中的变量定义为递归变量呼叫
您可以在函数中定义结果变量,但需要正确处理递归调用的返回值:
function getData(arr) {
var res = [];
if (Array.isArray(arr)) {
for (var i = 0; i < arr.length; i++) {
res = res.concat(getData(arr[i]));
}
} else {
res.push(arr);
}
return res;
}
(您不需要将结果数组作为函数的参数。)
嘿,上面的解决方案的一个变体是:
function steamrollArray(arr) {
var newArr = [];
arr.forEach(function(el){
if(!Array.isArray(el)){
newArr.push(el);
} else {
newArr = newArr.concat(steamrollArray(el));
}
});
return newArr;
}
:)
找到了另一个使用闭包的解决方案,它可能会对某些人有所帮助。
function getData(arr) {
var res = [];
return innerGetData(arr);
function innerGetData(arr) {
if(!Array.isArray(arr)) {
res.push(arr);
return res;
}
for(var i = 0; i < arr.length; i++) {
innerGetData(arr[i]);
}
return res;
}
}
使用pop(array_name)从数组中删除最后一项。
--Ada
相关文章:
- 在输入forEach(javascript)时重置变量
- Javascript变量在函数运行后不断重置自身
- 无法使用angularjs重置$scope变量
- 调用函数后如何重置全局变量
- 如何创建在页面重新加载时不重置的JSP变量
- 何时重置全局 JavaScript 变量
- 变量在 NodeJS 脚本中自动重置为其初始值
- 重置变量 JavaScript
- 如何返回变量并同时重置/删除它
- 在 AJAX 表单发送后刷新/重置 jquery 变量
- 离开if语句后重置Javascript变量
- 重置范围变量Angular.js
- Javascript全局变量正在重置
- JSON调用后JS中的全局变量重置
- 离子的状态不断变化.带notify false的transitionTo重置范围变量
- 如何在删除字段时重置JavaScript变量计数
- 全局变量退出函数后重置
- 在node.js中,全局变量的值在堆栈被无限递归超越后神秘地重置
- Javascript:当循环结束时,while循环(全局)变量会被丢弃/重置吗
- 角度视图更改重置$scope变量