Javascript 使用变量引用数组

Javascript 使用变量引用数组,javascript,arrays,variables,reference,Javascript,Arrays,Variables,Reference,我正在写一个页面,收集装配中安装的零件的序列号。如果可以,我想在客户端验证用户输入 所以,如果我有多个稠密数组,如何使用varaiable引用它们?例如,假设我有三个密集排列的数组,它们的名称表示零件号,值表示序列号(已在其他部件中使用) arr_PN-123-ABC=('SN0123'、'SN0124'、'SN0125') arr_PN-456-DEF=('SN00333'、'SN00334'、'SN00335') arr_PN-789-GHI=('SN-0001'、'SN-0002'、'SN

我正在写一个页面,收集装配中安装的零件的序列号。如果可以,我想在客户端验证用户输入

所以,如果我有多个稠密数组,如何使用varaiable引用它们?例如,假设我有三个密集排列的数组,它们的名称表示零件号,值表示序列号(已在其他部件中使用)

arr_PN-123-ABC=('SN0123'、'SN0124'、'SN0125')
arr_PN-456-DEF=('SN00333'、'SN00334'、'SN00335')
arr_PN-789-GHI=('SN-0001'、'SN-0002'、'SN-0003'、'SN-0004')
函数fcnValidateSN(_givenPN,_givenSN){
//确保给定的值不为null或空。。。
//导出与给定零件号对应的序列号数组。。。
var vArrName=“arr_”+vGivenPN;
//循环遍历序列号数组以确定给定的序列号是否已被使用。。。
对于(var x=0;x
所以问题是“vArrName”是一个值为“arr_u2;”的字符串,而不是对名为“arr_2;”的数组的引用

我尝试用eval()函数包装它,但eval()将破折号视为减号

另一个注意事项是:我不能使用jquery来完成这项工作


谢谢

您无法生成对使用
var
声明的变量的引用(请参见下文)。可以使用动态特性名称引用对象的特性,因此:

var arrays = {
  "arr_PN-123-ABC": ['SN0123','SN0124','SN0125'],
  "arr_PN-456-DEF": ['SN00333','SN00334','SN00335'],
  // ...
};
然后:

请注意,不能在变量名中使用“-”,但可以在对象属性名中使用“-”


对于浏览器中的全局变量,不能通过动态名称访问
var
变量是一个例外。这些变量最终都作为
窗口的属性
对象。

使用一个将数组作为元素的对象:

var arr_PN = {
    '123-ABC': ('SN0123','SN0124','SN0125'),
    '456-DEF': ('SN00333','SN00334','SN00335'),
    '789-GHI': ('SN-0001','SN-0002','SN-0003','SN-0004')
}
然后使用:

var vArrName = arr_PN->{vGivenPN};
  • JavaScript中的数组由
    [
    ]
    划分,而不是
  • 有效的JavaScript变量名不能包含“-”
  • 数组的length属性不是函数
嗯,我对您的代码做了一些(实际上,很多)调整,但我认为这是您需要的:

var serialGroups = {
  PN_123_ABC: ['SN0123','SN0124','SN0125'],
  PN_456_DEF: ['SN00333','SN00334','SN00335'],
  PN_789_GHI: ['SN-0001','SN-0002','SN-0003','SN-0004']
};

function validateSerial(groupName, sn) {
  var serials = serialGroups[groupName];

  for(var i=0; i < serials.length; i++){
    if(serials[i] == sn) {
      alert("Serial number '" + sn + "' was already used in another assembly.");
      //Do whatever you want here
      return;
    }
  }
}
var serialGroups={
PN_123_ABC:[SN0123'、'SN0124'、'SN0125'],
PN_456; u DEF:['SN00333'、'SN00334'、'SN00335'],
PN_789_GHI:[‘SN-0001’、‘SN-0002’、‘SN-0003’、‘SN-0004’]
};
函数validateSerial(组名,序号){
var serials=serialGroups[groupName];
对于(变量i=0;i
这包含语法错误;这不是JavaScript数组文字的样子,我不知道最后一行的代码应该是什么。alcides-谢谢,我能够使用您的方法让我的函数工作。不过有一件事:javascript密集数组是使用“(“&”)分隔的,但在本例中没有意义,因为我不再使用它们。由于我正在使用的零件号的总体包含“-”字符,因此在命名单个组时,我必须将它们替换为“u”-因为这种情况是可预测的,所以效果很好。(我的“声誉”不足以对你的答案投“赞成票”——这是我第一次在堆栈上提出问题)好吧,语句
var a=(111222333)
所做的唯一一件事就是使用括号语法将逗号分隔的列表视为一个表达式,并且,由于值由逗号运算符分隔,最后一个作为整个表达式的值返回,然后分配给变量a。EcmaScript和标准JavaScript中都没有密集数组语法。如果您使用的是其他风格的,请告诉我们,但这不是标准。Netscape One开发者指南,William R.Stanek(@1997)-第43页(Densley填充阵列)样本来自书籍:大陆=新阵列(“非洲”、“亚洲”、“澳大利亚”、“南极洲”、“欧洲”、“北美”、“南美”)这种语法工作得很好-我无法评论“标准”对它的解释,我在谷歌上搜索了“javascript密集数组”,获得了很多点击,包括这一条:。无论如何,密集阵列并不是解决这个问题的方法,而是你的代码——再次感谢!
var vArrName = arr_PN->{vGivenPN};
var serialGroups = {
  PN_123_ABC: ['SN0123','SN0124','SN0125'],
  PN_456_DEF: ['SN00333','SN00334','SN00335'],
  PN_789_GHI: ['SN-0001','SN-0002','SN-0003','SN-0004']
};

function validateSerial(groupName, sn) {
  var serials = serialGroups[groupName];

  for(var i=0; i < serials.length; i++){
    if(serials[i] == sn) {
      alert("Serial number '" + sn + "' was already used in another assembly.");
      //Do whatever you want here
      return;
    }
  }
}