TypeError:无法读取属性'推送'在二维数组中未定义

时间:2016-05-25 14:03:56

标签: javascript arrays

所以,在这里,我试图创建一个二维数组;数组数组。但是,每当我尝试将值推送到嵌套数组时,我都会收到标题中看到的错误。在这些for循环中,' b'数组中包含一系列字符串,这些字符串都以特定格式接收,然后代码将其分解并将其推送到二维数组中的值以便进一步工作。

var c = []

for(var u = 0; u < b.length; u++){
  c[u] = new Array(0);
  for(var y = 0; y < b[u].length; y++){
    c[u][y].push(b[u].substring(b[u].indexOf('\"'), b[u].indexOf(",")));
    b[u] = b[u].substring(b[u].indexOf(',') + 1);
  }
}

我已经在stackoverflow上查看了其他解决方案;要么我无法绕过它们,要么它们在这里不适用。我不知道这里有什么问题。求助。

3 个答案:

答案 0 :(得分:2)

var c = []

for(var u = 0; u < b.length; u++){
  c[u] = new Array(0);
  for(var y = 0; y < b[u].length; y++){
    // NOT WORKING
    // c[u][y].push(b[u].substring(b[u].indexOf('\"'), b[u].indexOf(",")));

    // WORKING
    c[u].push(b[u].substring(b[u].indexOf('\"'), b[u].indexOf(",")));

    // WORKING
    c[u][y] = b[u].substring(b[u].indexOf('\"'), b[u].indexOf(","));

    b[u] = b[u].substring(b[u].indexOf(',') + 1);
  }
}

答案 1 :(得分:0)

由于您已将数组b声明为blank而没有任何值var b = []

因此,b.length将是0

然后这个条件for(var u = 0; u < b.length; u++)将不会执行,代码将无效。

更新:

所以,你可以直接使用:

c[u].push(b[u].substring(b[u].indexOf('\"'), b[u].indexOf(",")));

答案 2 :(得分:0)

我认为这里的问题是你试图在已经有价值的东西上使用.push

/**
 * c is an array: []
 */
var c = []

for (var u = 0; u < b.length; u++) {
  /**
   * c[u] is a subarray: [u: []]
   */
  c[u] = new Array(0);
  for (var y = 0; y < b[u].length; y++) {
    /**
     * c[u][y] is a value, currently undefined: [u: [y: ??]]
     */
    c[u][y].push(b[u].substring(b[u].indexOf('\"'), b[u].indexOf(",")));
    b[u] = b[u].substring(b[u].indexOf(',') + 1);
  }
}

根据您的需要,您可以使用以下任一项:

// Value (replace as needed)
var value = b[u].substring(b[u].indexOf('\"'), b[u].indexOf(","));

// Option 1
c[u][y] = value;

// Option 2
c[u].push(value);