使用 eval 函数访问数组
Using eval Function To Access Arrays
我已经使用 for 循环和 eval 函数成功访问了不同的数组及其元素,如下所示:
var Array1 = [A,B,C,D];
var Array2 = [D,B,C,A];
var Array3 = [B,C,A,D];
var Array4 = [A,D,B,C];
for(var row = 1; row <=4; row++){
for(var column = 0; column <=3; column++){
if(row<4 && eval("Array" + row)[column] == eval("Array" + (row +1))[column]){
console.log("Value of Array" + row + "column" + column + "is equal to" + "value of Array" + eval(row + 1) + "column" + column + "\n");
}
}
}
我的问题是,我是否正确使用了 eval 函数。如果这不是使用 eval 函数的正确方法,我该如何在不使用 eval 函数的情况下动态访问 for 循环中的不同数组?
像这样使用 eval
,虽然它可能有效,但不是一个好主意,并且很容易编写危险代码。由于 eval
将执行其参数而不管实际传递的是什么,因此导致传递错误参数的错误可能会比不使用 eval
时产生的后果严重得多。 this SO question 的答案提供了更多见解。而是考虑使用数组对象:
var arrays = {
Array1: [A,B,C,D],
Array2: [D,B,C,A],
Array3: [B,C,A,D],
Array4: [A,D,B,C]
}
for(var row = 1; row <=4; row++){
for(var column = 0; column <=3; column++){
if(row<4 && arrays["Array" + row][column] == arrays["Array" + (row + 1)][column]){
console.log("Value of Array" + row + "column" + column + "is equal to" + "value of Array" + (row + 1) + "column" + column + "\n");
}
}
}
我不会说像这样使用 eval
是个好主意。 eval
非常 很少使用,因为它很难调试并且在大多数情况下可以用更容易理解的东西代替。它有有效的用例,但这不是其中之一。
改为使用数组数组:
var A = 2, B = 2, C = 3, D = 4;
var grid = [
[A,B,C,D],
[D,B,C,A],
[B,C,A,D],
[A,D,B,C]
]
for (var row = 0; row < grid.length; row++) {
for (var column = 0; column < grid[0].length; column++) {
if (row + 1 < grid.length && grid[row][column] === grid[row + 1][column]) {
// they're equal
}
}
}
我已经使用 for 循环和 eval 函数成功访问了不同的数组及其元素,如下所示:
var Array1 = [A,B,C,D];
var Array2 = [D,B,C,A];
var Array3 = [B,C,A,D];
var Array4 = [A,D,B,C];
for(var row = 1; row <=4; row++){
for(var column = 0; column <=3; column++){
if(row<4 && eval("Array" + row)[column] == eval("Array" + (row +1))[column]){
console.log("Value of Array" + row + "column" + column + "is equal to" + "value of Array" + eval(row + 1) + "column" + column + "\n");
}
}
}
我的问题是,我是否正确使用了 eval 函数。如果这不是使用 eval 函数的正确方法,我该如何在不使用 eval 函数的情况下动态访问 for 循环中的不同数组?
像这样使用 eval
,虽然它可能有效,但不是一个好主意,并且很容易编写危险代码。由于 eval
将执行其参数而不管实际传递的是什么,因此导致传递错误参数的错误可能会比不使用 eval
时产生的后果严重得多。 this SO question 的答案提供了更多见解。而是考虑使用数组对象:
var arrays = {
Array1: [A,B,C,D],
Array2: [D,B,C,A],
Array3: [B,C,A,D],
Array4: [A,D,B,C]
}
for(var row = 1; row <=4; row++){
for(var column = 0; column <=3; column++){
if(row<4 && arrays["Array" + row][column] == arrays["Array" + (row + 1)][column]){
console.log("Value of Array" + row + "column" + column + "is equal to" + "value of Array" + (row + 1) + "column" + column + "\n");
}
}
}
我不会说像这样使用 eval
是个好主意。 eval
非常 很少使用,因为它很难调试并且在大多数情况下可以用更容易理解的东西代替。它有有效的用例,但这不是其中之一。
改为使用数组数组:
var A = 2, B = 2, C = 3, D = 4;
var grid = [
[A,B,C,D],
[D,B,C,A],
[B,C,A,D],
[A,D,B,C]
]
for (var row = 0; row < grid.length; row++) {
for (var column = 0; column < grid[0].length; column++) {
if (row + 1 < grid.length && grid[row][column] === grid[row + 1][column]) {
// they're equal
}
}
}