2015-11-01 39 views
1

我想给我的散列数组中的4个值相同的行为。JavaScript哈希值验证

例如:

var array = {}; 

    if (array[key].config.tmp == undefined) { 
       array[key].config.tmp = {} 
      } 
      if(array[key].config.tmp.tp1){ 

      } 
      if(array[key].config.tmp.tp2){ 

      } 
      if(array[key].config.tmp.tp3){ 

      } 
      if(array[key].config.tmp.tp4){ 

      } 

由于TP1,TP2,TP3和TP4将具有相同的行为。我想简化验证。

是这样的:。

阵列[键] .config.tmp [TP1,TP2,TP3,TP4]是可能的?已经尝试过。但它是

tp1,tp2,tp3和tp4可能不存在(未定义)。 (有时只有tp1和tp2)。

任何意见,所以我不会重复的代码?

预先感谢

回答

1

更换你的代码中也可以使用的数组键过滤器:

if ((array[key].config.tmp || {}).keys().filter(
    function(k) { return /^tp[1234]/.test(k) } 
).length)) 
1

使用短路操作者像||。例如,如果你正在检查多个属性的存在,访问一个不存在的属性是虚假的。

var c = a[key].config.tmp.a || a[key].config.tmp.b || .... || //default 

在这个例子中,c将保持其中第一个值的值为true。如果它们全都返回false,则还可以在末尾包含“默认”值。请记住,访问不存在的属性的属性是一种类型错误,所以您必须确保至少存在config.tmp。所以,你可以用

if (a[key].config.tmp.a || a[key].config.tmp.b || ....) { 

} 
+0

,会为我的验证的第一步工作,但我会后,有一个问题。例如: 例如: 如果tp1未定义并且应该存在,则需要属性9999,并且通过验证,我无法识别哪个tp(如果它是tp1或tp2或tp3或tp4) –