动态访问已定义的函数或变量属性

时间:2016-03-22 08:17:50

标签: javascript performance

我花时间阅读有关访问对象属性的内容,但无法找到解决问题的方法。

  1. 让我们说我有10个数组,名称为arr1,arr2,arr3 ... arr10。如何在不使用eval()的情况下访问所有数组的长度?我是通过for循环和eval("arr" + i + ".length")完成的。我知道arr1["length"]有效,但是如何访问所有数组的长度?使用循环?
  2. 我如何访问所有这些数组的split()splice()pop()等函数?
  3. 我们说arr1 = ["tab1", "tab2"],其中tab1, tab2稍后定义为数组。如果我希望从tab1访问arr1的长度,我该怎么办?如果我还想访问数组上定义的函数?

3 个答案:

答案 0 :(得分:0)

您应该将所有这些数组移动到父objectarray

另外,你不应该避免eval。请参阅Why is using the JavaScript eval function a bad idea?

var arr1 = [1,2];
var arr2 = [1,2,3,4];
var arr3 = [1,2,3];
var arr4 = [1,2,6,4,3,6,];
var arr5 = [1];

var obj = {
  array1: arr1,
  array2: arr2,
  array3: arr3,
  array4: arr4,
  array5: arr5
}

Object.keys(obj).forEach(function(o){
  document.write(obj[o].length + "<br/>");
});

答案 1 :(得分:0)

  

让我们说我有10个数组,名称为arr1,arr2,arr3 ... arr10。怎么样   我会在不使用eval()的情况下访问所有数组的长度吗?   我用for循环和eval(“arr”+ i +“。length”)完成了它。我知道   arr1 [“length”]有效,但如何访问所有数组的长度?   使用循环?

如果这些数组在函数

中定义如下
var arr1 = [];
var arr2 = [];

然后您无法按名称访问它们。

您需要在对象内定义数组。例如

var obj = {
  "arr1" : [1,2],
  "arr2" : [2,3]
}

如果知道数组名称,可以通过

访问数组
console.log(obj.arr1);

console.log(obj["arr" + 1 ]); //1 can be replaced by iterating i

但是,如果这些数组是在全局上下文中定义的(在任何函数之外),那么您可以通过window对象访问它们。

window["arr1"]
  

让我们说arr1 = [“tab1”,“tab2”],其中tab1,tab2稍后定义   作为数组。如果我希望从arr1访问tab1的长度应该如何   我做?如果我还想访问数组上定义的函数?

如果tab1定义为'var tab1 = [];'然后你无法通过名称访问它。

您需要再次将这些数组包装在对象中。

var obj = {"tab1" : []};

然后你可以通过

来访问它
console.log(obj[arr1[0]]);

答案 2 :(得分:0)

如果您事先不知道数组的数量,那么数组数组也可以正常工作:

var arrays = [[1,2], [1,2,3,4], [1,2,3], [1,2,6,4,3,6,], [1]];

for (var i = 0; i < arrays.length; i++) {
    console.log(arrays[i].length);
    document.write('<p>[' + arrays[i] + '].length = ' + arrays[i].length + '</p>');
}