在eval中遇到一些问题,数组返回多维数组的第二个值。
az1_array = new Array([33010, 50],[33012, 50],[33013, 50]);
nzone=33012;
eval(az1_array).forEach(function(t) {
if(t[0]==nzone){
alert(az1_array[t][1]);
}
});
我试图在运行此代码时获取第二个参数,但无论我使用什么nzone,它总是返回第一个值33010,我将如何获取它来搜索整个数组并仅返回nzone的第二个参数?
答案 0 :(得分:1)
首先,避免使用全局变量。接下来,eval
是不必要的,您不应该将它用于此类事情。第三,使用Array.filter
并过滤您想要的内容。
console.log(az1_array.filter(function(arr){
return arr[0] == nzone;
}));
eval()
是一个危险的函数,它执行它传递的代码 具有来电者的特权。如果使用字符串运行eval() 可能会受到恶意方的影响,您最终可能会运行 具有您的权限的用户计算机上的恶意代码 网页/扩展程序。更重要的是,第三方代码可以看到 调用eval()
的范围,可能导致可能的攻击 以类似Function
不易受影响的方式。
此外,与其他选择相比,它相当慢。
答案 1 :(得分:0)
要么保持大部分代码相同,只需更改两件事:
var az1_array = new Array([33010, 50],[33012, 51],[33013, 52]);
nzone=33012;
az1_array.forEach(function(t) { // remove eval (or clarify why you used it in the first place)
if(t[0]==nzone){
alert(t[1]); // change the alert
}
});
或使用现有方法liker Array.prototype.filter()
Filter