检索以字符串形式返回的数组的值

时间:2019-07-11 10:22:52

标签: javascript jquery arrays

我在前端存储了以下数组。

myArr[0] = new Array("AF", "B", "C", "D", "EM", "F", "G", "H", "I", "J");
myArr[1] = new Array("C", "DD", "M", "ED", "F", "DG", "B", "C", "D", "C");
myArr[2] = new Array("F", "G", "H", "I", "E", "F", "G", "H", "I", "J");

我需要获取数组中元素的值。例如myArr [0] [0]应该返回AF。不幸的是,我正在通过服务调用从以下位置找到要作为数组字符串的数组。

["myArr[1][6]", "myArr[3][4]", "myArr[4][2]"]

我该如何转换并获得上述数组位置的值。提前致谢。

4 个答案:

答案 0 :(得分:3)

您可以使用eval将字符串作为脚本执行:

eval("myArr[1][6]") // gives "C"

在此处查看codepen:https://codepen.io/jenko3000/pen/NZJRYK

但是请注意,将字符串作为脚本执行是dangerous

答案 1 :(得分:1)

您可以使用正则表达式“提取”两个索引,然后使用它们来获取值,如下所示:

let myArr = [];
myArr[0] = new Array("AF", "B", "C", "D", "EM", "F", "G", "H", "I", "J");
myArr[1] = new Array("C", "DD", "M", "ED", "F", "DG", "B", "C", "D", "C");
myArr[2] = new Array("F", "G", "H", "I", "E", "F", "G", "H", "I", "J");

let arr = ["myArr[1][6]", "myArr[2][4]", "myArr[0][2]"];

let res = arr.map(str => {
  let [x, y] = str.match(/(\d+)/g);
  return myArr[x][y];
});
console.log(res);

答案 2 :(得分:1)

无需使问题复杂化。在每个值上加上一个简单的mapeval uate就足够了:

const myArr = [
  ["AF", "B", "C", "D", "EM", "F", "G", "H", "I", "J"],
  ["C", "DD", "M", "ED", "F", "DG", "B", "C", "D", "C"],
  ["F", "G", "H", "I", "E", "F", "G", "H", "I", "J"]
]

var positions = ["myArr[1][6]", "myArr[2][4]", "myArr[0][2]"]

positions = positions.map(eval)

console.log(positions)

  

请注意,我们可以在.map(eval)上使用速记.map(e => eval(e)),因为我们只将一个元素传递给一个函数,因此速记将为我们做到这一点。

     

此外,正如Will所指出的那样,eval可能很危险,因为eval可以执行恶意脚本。

答案 3 :(得分:0)

此代码将用各自的值替换存储在数组中的位置。

let myArr=[]
myArr[0] = new Array("AF", "B", "C", "D", "EM", "F", "G", "H", "I", "J");
myArr[1] = new Array("C", "DD", "M", "ED", "F", "DG", "B", "C", "D", "C");
myArr[2] = new Array("F", "G", "H", "I", "E", "F", "G", "H", "I", "J");
let values=["myArr[1][6]", "myArr[2][4]", "myArr[0][2]"];
for (var i = 0; i < values.length; i++)
{
	 values[i]=eval(values[i])
}
console.log(values)