数组[key]。JavaScript中未定义推送

数组[key]。JavaScript中未定义推送,javascript,arrays,Javascript,Arrays,在javascripts中尝试将项推送到数组时,会出现错误,下面的伪代码说明了发生的情况: var data = new Array(); for(...) { data[key].push(item[i]); } 它显示以下错误: Cannot read property 'push' of undefined 谢谢如果需要2d数组,则必须将外部数组的每个元素初始化为数组 // Have to check every array item, if it's not an a

在javascripts中尝试将项推送到数组时,会出现错误,下面的伪代码说明了发生的情况:

var data = new Array();
for(...) {
     data[key].push(item[i]);
}
它显示以下错误:

   Cannot read property 'push' of undefined

谢谢

如果需要2d数组,则必须将外部数组的每个元素初始化为数组

// Have to check every array item, if it's not an array already, make it so
for(...) {
    if (!data[key]) {
        data[key] = [];
    }
    data[key].push(item[i]);
}
如果您知道所需的内部阵列数量,则始终可以执行以下操作:

var data = [[],[],[],[],[],[]];
在您的示例中,因为它们的变量名是key,所以我假设您实际上需要一个数组对象。如果您提前知道这些键,可以使用以下文字

var data = {
  myKey1: [],
  myKey2: []
}

因为
data
是数组。除非
data[key]
包含数组,否则将无法定义。考虑<代码> var数据= [1,2,3,4],5];
是第一个索引(1)。您试图对整数使用数组方法,这显然是行不通的。@SterlingArcher已经给了您答案。您可以从教程和文档中学习数组的基本知识:。也许你想要
data[key]=item[i]
。你希望
data[key]
已经是一个数组了吗?@MohanadKaleia是的,你必须这样做。你定义一个数据数组[key],假设你知道这个键,但在我的例子中,这个键是在运行时在for循环中定义的,但我不知道前面的键,我不知道我需要多少,这是我的问题,我需要寻找一种动态的方式来定义2d数组,谢谢,那么第一段代码就是你想要的,我会尝试一下。。谢谢,这很管用,但我必须有所有的钥匙,但我成功了,谢谢