javascript:在数组中存储多个变量
我有4个功能:javascript:在数组中存储多个变量,javascript,arrays,Javascript,Arrays,我有4个功能:function1,function2,function3,function4 现在,前3个函数中的每一个都在计算一个值。我想将这3个值存储在一个全局数组中,并在第4个函数中使用它 以下方法正确吗 var array1=[] function1(){ array1[0]=calculated value1; } function2(){ array1[1]=calculated value2; } function3(){ array1[2]=calculated value
function1
,function2
,function3
,function4
现在,前3个函数中的每一个都在计算一个值。我想将这3个值存储在一个全局数组中,并在第4个函数中使用它
以下方法正确吗
var array1=[]
function1(){
array1[0]=calculated value1;
}
function2(){
array1[1]=calculated value2;
}
function3(){
array1[2]=calculated value3;
}
此数组将用于第四个函数。不,我不建议这样做 更新: 根据您作为对另一个答案的评论而编写的信息,我猜您的不同函数用于根据用户输入计算某些值 如果您真的想在全局变量中缓存值,我仍然建议您使用具有命名成员的对象,因为在读取和试图理解代码时,它通常比数字索引更有意义:
var myGlobalObject={};
function one(){
myGlobalObject.nameOfValueOne = calculated value1;
}
如果打印时需要将其作为阵列,则可以创建该阵列:
myPlotFunction( [ myGlobalObject.nameOfValueOne, myGlobalObject.nameOfValueTwo] );
但是如果命名这些值没有意义,比如如果用户可以添加可变数量的值,那么您应该使用数组,可能还应该使用myArray.push(value)不,我不建议这样做 更新: 根据您作为对另一个答案的评论而编写的信息,我猜您的不同函数用于根据用户输入计算某些值 如果您真的想在全局变量中缓存值,我仍然建议您使用具有命名成员的对象,因为在读取和试图理解代码时,它通常比数字索引更有意义:
var myGlobalObject={};
function one(){
myGlobalObject.nameOfValueOne = calculated value1;
}
如果打印时需要将其作为阵列,则可以创建该阵列:
myPlotFunction( [ myGlobalObject.nameOfValueOne, myGlobalObject.nameOfValueTwo] );
但是如果命名值没有意义,比如如果用户可以添加可变数量的值,那么您应该使用数组,并且可能使用myArray。push(value)除非非常必要,否则不要使用全局变量,如果你真的想使用它,试着使用闭包来确保你不填充全局范围,也让你的变量和函数成为私有的,这样其他同名的全局变量和函数就不会相互影响 尝试将现有代码包装成闭包。这样,我认为您现有的代码一点也不差。全局变量在闭包块中是全局的
(function($){
//.. your existing code.
})(jQuery)
注意:所有变量和函数仅在闭包块中可用 除非非常必要,否则不要使用全局变量,如果您真的想使用它,请尝试使用闭包,以确保您不填充全局范围,并将您的变量和函数设置为私有,这样其他具有相同名称的全局变量和函数就不会相互影响 尝试将现有代码包装成闭包。这样,我认为您现有的代码一点也不差。全局变量在闭包块中是全局的
(function($){
//.. your existing code.
})(jQuery)
注意:所有变量和函数仅在闭包块中可用 因为函数是JavaScript中的第一类对象,所以您可以做一些像这样的黑客行为
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
因此,现在每个函数都存储自己的最后一个结果,您可以在其他函数中使用它。因为函数是JavaScript中的第一类对象,所以您可以这样做
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
现在,每个函数都存储了自己的最后一个结果,您可以在其他函数中使用它。下面是另一个与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]
下面是与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]
你有什么问题吗?或者你只是想找一个更好的方法来做事?该死!我道歉!!是 啊所以我想确认我的方法是否正确。如果有更好的方法,你有什么问题吗?或者你只是在要求一个更好的方法来做事情?该死!我道歉!!是 啊所以我想确认我的方法是否正确。如果有更好的方法,他的函数不会返回任何东西!!生成的数组用作数据集,用于在d3中创建条形图。在那种情况下,我不能使用对象。它必须在数组中。@Reddy我知道伪代码没有返回语句。Cerberus甚至没有写到应该添加结果。我想知道为什么没有使用最常用的方法。@有些我完全同意,无意冒犯,只是想澄清一下。他的函数没有返回任何东西!!生成的数组用作数据集,用于在d3中创建条形图。在那种情况下,我不能使用对象。它必须在数组中。@Reddy我知道伪代码没有返回语句。Cerberus甚至没有写到应该添加结果。我想知道为什么没有使用最常用的方法。@有些我完全同意,无意冒犯,只是想说清楚。这听起来不错!我没有想到这一点。!谢谢。:)jQuery与此有何关系???既然他说的是d3图表,他就必须使用jQuery这听起来不错!我没有想到这一点。!谢谢。:)jQuery与此有何关系???既然他说的是d3图表,他就必须使用jQuery