在函数内部填充数组

Posted

技术标签:

【中文标题】在函数内部填充数组【英文标题】:Populate array inside of function 【发布时间】:2020-10-22 12:14:48 【问题描述】:

我有一个函数可以清除两个数组,然后用从 mysql 服务器接收到的值填充它们。

function sqlget() 
  var arrayA = [];
  var arrayB = [];
  con.query("SELECT * FROM table", function(err,result,fields) 
    if (err) throw err;
    Object.keys(result).forEach(function(key) 
      arrayA.push(result[key].columnA);
      arrayB.push(result[key].columnB);
    );
  );

然后我想做的是在函数外部调用 arrayA/arrayB 并让它返回函数内部获取的 sql 信息,例如......

sqlget()
console.log(arrayA)

任何关于如何做到这一点的建议将不胜感激。

【问题讨论】:

【参考方案1】:

您可以在这里做一些事情。你可以在函数之外声明这些数组,所以你会有这样的东西:

let arrayA = ['something'];
let arrayB = [];

function sqlget() 
  arrayA = [];
  arrayB = [];

  con.query("SELECT * FROM table", function(err,result,fields) 
    if (err) throw err;
    Object.keys(result).forEach(function(key) 
      arrayA.push(result[key].columnA);
      arrayB.push(result[key].columnB);
    );
  );


sqlget();
console.log(arrayA)

或者你也可以玩转,仍然返回函数内部的数组并返回一个对象:

function sqlget() 
  const arrayA = [];
  const arrayB = [];
  
  con.query("SELECT * FROM table", function(err,result,fields) 
    if (err) throw err;
    Object.keys(result).forEach(function(key) 
      arrayA.push(result[key].columnA);
      arrayB.push(result[key].columnB);
    );
  );

  return 
    a: arrayA,
    b: arrayB
  ;


const arrays = sqlget();

console.log(arrays.a);
console.log(arrays.b);

【讨论】:

【参考方案2】:

您需要在函数之外定义这两个数组。当您在 块或函数内定义变量时,您无法在此块之外访问其称为本地范围的变量。请阅读javascript scope

var arrayA = [];
var arrayB = [];

function sqlget() 
  
  con.query("SELECT * FROM table", function(err,result,fields) 
    if (err) throw err;
    Object.keys(result).forEach(function(key) 
      arrayA.push(result[key].columnA);
      arrayB.push(result[key].columnB);
    );
  );
 

【讨论】:

以上是关于在函数内部填充数组的主要内容,如果未能解决你的问题,请参考以下文章

在 Mongoose 中填充包含 ref 的数组数组

为啥我在构造函数中填充的这个数组在构造函数返回后没有填充?

数组空值empty

Mongoose 在数组上填充函数

从使用 SwiftyJSON 的函数返回填充数组

将数组名称传递给函数,然后填充它