Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何动态使用访问阵列?_Javascript_Arrays - Fatal编程技术网

Javascript 如何动态使用访问阵列?

Javascript 如何动态使用访问阵列?,javascript,arrays,Javascript,Arrays,我使用的是jQuery1.7.1(但这可能无关紧要) 我有几个JavaScript数组,它们以多种方式填充。阵列基本上如下所示: var TreeArray = [0,1,2]; var FruitArray = [4,5,6,7]; 我有一些具有项目类型和项目id的链接: <a href='?' class='Link' data-itemid='123' data-itemtype='Tree'>elm</a> <a href='?' class='Link'

我使用的是jQuery1.7.1(但这可能无关紧要)

我有几个JavaScript数组,它们以多种方式填充。阵列基本上如下所示:

var TreeArray = [0,1,2];
var FruitArray = [4,5,6,7];
我有一些具有项目类型和项目id的链接:

<a href='?' class='Link' data-itemid='123' data-itemtype='Tree'>elm</a>
<a href='?' class='Link' data-itemid='789' data-itemtype='Tree'>walnut</a>
<a href='?' class='Link' data-itemid='456' data-itemtype='Fruit'>orange</a>
<a href='?' class='Link' data-itemid='111' data-itemtype='Fruit'>apple</a>
这就是问题所在。如果ItemType是“Tree”,我想把ItemID放在TreeArray中。如果ItemType是“Fruit”,我想把ItemID放在水果数组中。这是我的函数(不起作用):

我将有很多不同类型的数组,而不仅仅是两种。我将有相当多的功能

那么,如何动态访问这些阵列呢

“我将拥有多种不同类型的数组,而不仅仅是两种。我将拥有多种功能

那么,如何动态访问这些阵列?”

通常这意味着答案是有一个数组数组,或者一个数组对象,从中提取引用;这似乎类似于您尝试使用
var WhichArray=ItemType+“Array”
所做的操作

您可以在创建数组时自动构建这个超级容器,或者为所有数组提供相同的类并执行
getElementsByClassName
或类似的替代操作

例如,您可以执行以下操作:

var clicked = {}; // looks like {Tree:[123, 789], Fruit:[...]}

// For each clickable link...
document.getElementsByClassName('Link').forEach(function(link) {
    // ... add a callback which says...
    link.onclick = function(this) {
        // ... to take the itemtype and itemid...
        var itemType = link.getAttribute('data-itemtype');
        var itemId = link.getAttribute('data-itemid');

        // ... and add it to our master dictionary
        if (clicked[itemType]===undefined)
            clicked[itemType] = [];
        clicked[itemType].push(itemId);
    };
});

这是您需要的全部代码。,总计。

将数组更改为对象的属性,然后您可以按名称动态访问它们:

var arrays = {
    Tree: [0,1,2],
    Fruit: [4,5,6,7]
};

var addToArray = function addToArray(ItemType, ItemID) {
    arrays[ItemType].push(ItemID);
}

另一种选择是,如果
trearray
furtarray
是全局变量,您也可以像这样从
窗口
对象访问它们,而不更改数组定义,尽管我更喜欢上面的第一种实现:

// global variables
var TreeArray = [0,1,2];
var FruitArray = [4,5,6,7];

var addToArray = function addToArray(ItemType, ItemID) {
    var WhichArray = ItemType + "Array";
    window[WhichArray].push(ItemID);
}

这是因为所有全局变量都是窗口对象的隐式属性。

您可以将数组放置在对象中,并使用
[]
访问它们:

var myObj = {
   TreeArray:  [0,1,2],
   FruitArray: [4,5,6,7]
};

var selector = 'Tree';

// Access the array
console.log(myObj[selector + 'Array'][2]); // 2

在操作中:

为什么不为具有不同项目类型的对象设置关键帧

var lists = {
  Tree: [0,1,2],
  Fruit: [4,5,6,7]
}

var addToArray = function addToArray(ItemType, ItemID) {
  var WhichArray = lists[ItemType];
  WhichArray.push[ItemID];
}

var WhichArray=ItemType+“Array”

WhichArray将是一个字符串,而不是您想要的数组


您可以使用:
var WhichArray=window[ItemType+“Array”]相反,您基本上有两种选择:

1) if语句(或开关盒,如果您愿意):

2) 将数组存储在某种类型的数据结构(数组或对象)中:


“那不起作用”-为什么不起作用?
data=itemid='123'
它不应该是
data itemid='123'
?不是它是错误的来源,而是
WhichArray.push[itemid]应该是
WhichArray.push(ItemID).push()
上的错误支撑。你答案的顶部很有魅力。我知道有一个很好的答案。谢谢你答案的上半部分接近我的最终答案。谢谢
var myObj = {
   TreeArray:  [0,1,2],
   FruitArray: [4,5,6,7]
};

var selector = 'Tree';

// Access the array
console.log(myObj[selector + 'Array'][2]); // 2
var lists = {
  Tree: [0,1,2],
  Fruit: [4,5,6,7]
}

var addToArray = function addToArray(ItemType, ItemID) {
  var WhichArray = lists[ItemType];
  WhichArray.push[ItemID];
}
var addToArray = function addToArray(ItemType, ItemID) {
    if (ItemType === 'Tree') {
        TreeArray.push(itemID); // notice push is a function, don't call with []...
    } else {
        FruitArray.push(itemID); 
    }
};
var arrays = {
    Tree: [0,1,2],
    Fruit: [4,5,6,7]
};

var addToArray = function addToArray(ItemType, ItemID) {
    arrays[ItemType].push(ItemID);
};