首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在此代码中使用全局变量的最佳替代方法

在此代码中使用全局变量的最佳替代方法
EN

Stack Overflow用户
提问于 2016-12-03 03:57:14
回答 6查看 181关注 0票数 2

自从我开始编程以来,我似乎把目标对准了全局变量,发现没有它们很难工作,在这里使用递归函数尤其困难。有没有人能帮我把这段代码变成无全局变量的?另外,有没有可以帮助我改变思维方式的参考资料,这样我就不会觉得需要它们了?我觉得我思考代码的方式需要改变一些东西,但我不知道是什么。

代码语言:javascript
复制
var res = [];

function steamrollArray(arr) {
  // I'm a steamroller, baby
  func(arr);
  console.log(res);
  return res;
}

steamrollArray([1, {}, [3, [[4]]]]);

function func(array){
  for (var i=0; i<array.length ; i++){
    if (Array.isArray(array[i])){
      func(array[i]);
    }
    else {
      res.push(array[i]);
    }
  }
}

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2016-12-03 04:05:36

您可以将结果数组作为参数传递,因为在JS中数组和对象是通过引用传递的。

代码语言:javascript
复制
function steamrollArray(arr) {
  // I'm a steamroller, baby
  var res = [];
  func(arr, res);
  console.log(res);
  return res;
}

steamrollArray([1, {}, [3, [[4]]]]);

function func(array, res){
  for (var i=0; i<array.length ; i++){
    if (Array.isArray(array[i])){
      func(array[i], res);
    }
    else {
      res.push(array[i]);
    }
  }
}

票数 1
EN

Stack Overflow用户

发布于 2016-12-03 04:06:40

只需在函数内部声明变量,并在末尾返回它。适当地处理递归调用。

代码语言:javascript
复制
function flatten(array){
  var res = [];
  for (var item of array) {
    if (Array.isArray(item))
      res.push(...flatten(item));
    else
      res.push(item);
  }
  return res;
}
console.log(flatten([1, {}, [3, [[4]]]]));

这与您的代码并不完全一样,但这可能是人们所期望的。

票数 2
EN

Stack Overflow用户

发布于 2016-12-03 04:04:26

另一种方法是使用单个函数,该函数迭代并收集数据,并仅返回部分收集的数据。

代码语言:javascript
复制
function steamrollArray(array) {
    var result = [];  
    for (var i = 0; i < array.length; i++) {
        if (Array.isArray(array[i])) {
            result = result.concat(steamrollArray(array[i]));
        } else {
            result.push(array[i]);
        }
    }
    return result;
}

console.log(steamrollArray([1, {}, [3, [[4]]]]));

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40939958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档