javascript:在数组中存储多个变量

时间:2016-03-06 05:32:35

标签: javascript arrays

我有4个功能:function1function2function3function4

现在,正在计算前3个函数中的每个函数的值。我想将这3个值存储在全局数组中,并在第4个函数中使用它。

以下方法是否正确?

var array1=[]

function1(){
array1[0]=calculated value1;
}

function2(){
array1[1]=calculated value2;
}

function3(){
array1[2]=calculated value3;
}

此数组将用于第4个函数。

4 个答案:

答案 0 :(得分:1)

不,我不建议这样做。

<强>更新: 基于您作为对另一个答案的评论而写的信息,我猜您的不同函数用于根据用户输入计算某些值。

如果你真的想要在全局变量中缓存这些值,我仍然会建议你使用一个带有命名成员的对象,因为它在读取和试图理解代码时通常比数字索引更有意义:

var myGlobalObject={};

function one(){
  myGlobalObject.nameOfValueOne = calculated value1;
}

如果在绘制它时需要它作为数组,则可以创建该数组:

myPlotFunction( [ myGlobalObject.nameOfValueOne, myGlobalObject.nameOfValueTwo] );

但是如果命名值没有意义,就像用户可以添加可变数量的值一样,那么你应该使用一个数组,并且可能使用myArray.push(value)

答案 1 :(得分:1)

除非它非常非常必要,否则不要使用全局变量。如果你真的想要使用它,尝试使用闭包只是为了确保你不填充全局范围,同时使你的变量和函数私有,所以其他全局变量和具有相同名称的函数不会相互影响。

尝试在闭包中包装现有代码。这样我认为你现有的代码一点都不差。并且您的全局变量在闭包块中是全局变量。

 (function($){
  //.. your existing code.
 })(jQuery)

注意:所有变量和函数仅在闭包块中可用。

答案 2 :(得分:1)

由于函数是JavaScript中的第一类对象,你可能会做一些像这样的hacky东西

var i = 0;
var fa = function() {
  fa.result = "result_" + i;
  i += 1;
};

console.log(fa.result); // prints undefined

// now call fa
fa();

console.log(fa.result); // prints result_0


// now call fa again
fa();

console.log(fa.result); // prints result_1

所以现在每个函数都存储它自己的最后一个结果,你可以在其他函数中使用它。

答案 3 :(得分:0)

这是与你的D3.js场景相关的另一个答案,享受

// create a datastructure to hold your array like this
var ArrayHolder = function() {
  var _array = [null, null, null];
  var __nameIndexMap__ = {
    "A": 0,
    "B": 1,
    "C": 2
  };
  Object.defineProperty(this, 'setData', { 
    value: function(name, value) {
      var index = __nameIndexMap__[name];
      if (index >= 0) {
        _array[index] = value;
      }
    }
  });
  Object.defineProperty(this, 'array', {
    get: function() {
      return _array;
    }
  });
};

var myArray = new ArrayHolder();


console.log(myArray.array); // prints [null, null, null]

var i = 0;

function a() {
  // provide each function a name
  var __name__ = "A";
  myArray.setData(__name__, i++);
}

a();

console.log(myArray.array);  // prints [0, null, null]

function b() {
  var __name__ = "B";
  myArray.setData(__name__, i++);
}

b();

console.log(myArray.array); // prints [0, 1, null]

function c() {
  var __name__ = "C";
  myArray.setData(__name__, i++);
}

c();
console.log(myArray.array); // prints [0, 1, 2]


a();
console.log(myArray.array); // prints [3, 1, 2]