2012-07-05 119 views
21

我试图推到一个二维数组没有它搞乱了,目前我的数组是:推()二维数组

var myArray = [ 
[1,1,1,1,1], 
[1,1,1,1,1], 
[1,1,1,1,1] 
] 

而且我的代码,我想的是:

var r = 3; //start from rows 3 
var c = 5; //start from col 5 

var rows = 8; 
var cols = 7; 

for (var i = r; i < rows; i++) 
{ 
    for (var j = c; j < cols; j++) 
    { 
     myArray[i][j].push(0); 
    } 
} 

这应该导致以下:

var myArray = [ 
[1,1,1,1,1,0,0], 
[1,1,1,1,1,0,0], 
[1,1,1,1,1,0,0], 
[0,0,0,0,0,0,0], 
[0,0,0,0,0,0,0], 
[0,0,0,0,0,0,0], 
] 

但事实并非如此,不知道这是否是做或不正确的方法。

所以问题是我该如何做到这一点?

+2

什么*不*它呢? – 2012-07-05 14:03:29

回答

30

你有一些错误,在你的代码:

  1. 使用myArray[i].push(0);添加一个新列。您的代码(myArray[i][j].push(0);)将在三维数组中工作,因为它会尝试将另一个元素添加到位置为[i][j]的数组。
  2. 您只能在所有行中扩展(col-d)列列,即使在尚未初始化的列中也是如此,因此目前没有条目。

一个正确的,但那种详细的版本,会是以下几点:

var r = 3; //start from rows 3 
var c = 5; //start from col 5 

var rows = 8; 
var cols = 7; 

// expand to have the correct amount or rows 
for(var i=r; i<rows; i++) { 
    myArray.push([]); 
} 

// expand all rows to have the correct amount of cols 
for (var i = 0; i < rows; i++) 
{ 
    for (var j = myArray[i].length; j < cols; j++) 
    { 
     myArray[i].push(0); 
    } 
} 
+3

哦,我现在看它如何工作,谢谢。 – Jo3la 2012-07-05 14:37:03

2
var r = 3; //start from rows 3 
var c = 5; //start from col 5 

var rows = 8; 

var cols = 7; 


for (var i = 0; i < rows; i++) 

{ 

for (var j = 0; j < cols; j++) 

{ 
    if(j <= c && i <= r) { 
     myArray[i][j] = 1; 
    } else { 
     myArray[i][j] = 0; 
    } 
} 

} 
+2

(1)你有一个语法错误:在'else'之前缺少'{'''。 (2)如果有要添加的行,此代码将不起作用:'ReferenceError:未定义myArray'。 – Sirko 2012-07-05 14:15:35

+1

是添加{。有一个引用错误,因为我猜这是一段内联代码,并且数组已经存在,因为它们应该是上面的代码片段。 – Daniel 2012-07-05 14:38:28

4

您可以通过所有行循环,并添加缺少的行和列。对于已经存在的行,则循环从C到的cols,为新的行,第一推空数组到外部阵列,然后循环从0到COLS:

var r = 3; //start from rows 3 
var c = 5; //start from col 5 

var rows = 8; 
var cols = 7; 

for (var i = 0; i < rows; i++) { 
    var start; 
    if (i < r) { 
    start = c; 
    } else { 
    start = 0; 
    myArray.push([]); 
    } 
    for (var j = start; j < cols; j++) { 
     myArray[i].push(0); 
    } 
} 
0

您呼叫上的推()数组元素(INT),其中按()应在阵列上调用,也处理/填充阵列这种方式是没有意义的 你可以做这样的

for (var i = 0; i < rows - 1; i++) 
{ 
    for (var j = c; j < cols; j++) 
    { 
    myArray[i].push(0); 
    } 
} 


for (var i = r; i < rows - 1; i++) 
{ 

    for (var j = 0; j < cols; j++) 
    { 
     col.push(0); 
    } 
} 

你也可以使用二者结合起来循环if if条件,如果行< r,否则如果行> = r

+1

你给的代码是错的,我想。请检查 – 999k 2014-07-23 12:49:08

4

遍历两个维度意味着您需要检查两个维度。

假设你开始:

var myArray = [ 
    [1,1,1,1,1], 
    [1,1,1,1,1], 
    [1,1,1,1,1] 
]; //don't forget your semi-colons 

要扩展这个二维数组变成:

var myArray = [ 
    [1,1,1,1,1,0,0], 
    [1,1,1,1,1,0,0], 
    [1,1,1,1,1,0,0], 
    [0,0,0,0,0,0,0], 
    [0,0,0,0,0,0,0], 
    [0,0,0,0,0,0,0], 
]; 

这意味着你需要了解有什么区别。

开始与外部阵列:

var myArray = [ 
    [...], 
    [...], 
    [...] 
]; 

如果你想使这阵时间越长,你需要检查它的正确长度,并添加更多的内部阵列来弥补差额:

var i, 
    rows, 
    myArray; 
rows = 8; 
myArray = [...]; //see first example above 
for (i = 0; i < rows; i += 1) { 
    //check if the index exists in the outer array 
    if (!(i in myArray)) { 
     //if it doesn't exist, we need another array to fill 
     myArray.push([]); 
    } 
} 

下一步需要循环访问每个阵列中的每个列,我们将建立在原代码:

var i, 
    j, 
    row, 
    rows, 
    cols, 
    myArray; 
rows = 8; 
cols = 7; //adding columns in this time 
myArray = [...]; //see first example above 
for (i = 0; i < rows; i += 1) { 
    //check if the index exists in the outer array (row) 
    if (!(i in myArray)) { 
     //if it doesn't exist, we need another array to fill 
     myArray[i] = []; 
    } 
    row = myArray[i]; 
    for (j = 0; j < cols; j += 1) { 
     //check if the index exists in the inner array (column) 
     if (!(i in row)) { 
      //if it doesn't exist, we need to fill it with `0` 
      row[j] = 0; 
     } 
    } 
} 
3

在你的情况,你可以做到这一点,而无需使用push可言:

var myArray = [ 
    [1,1,1,1,1], 
    [1,1,1,1,1], 
    [1,1,1,1,1] 
] 

var newRows = 8; 
var newCols = 7; 

var item; 

for (var i = 0; i < newRows; i++) { 
    item = myArray[i] || (myArray[i] = []); 

    for (var k = item.length; k < newCols; k++) 
     item[k] = 0;  
} 
+1

谢谢非常有用,是否可以删除添加的行?也许我可以使用上面的同样的方法,但是用spl [k] .splice(k,1)删除添加的行/列 – Jo3la 2012-07-05 15:40:45

+1

因为添加的行被附加了,所以可以使用'length'来删除它们:'myArray .length = 3';使最后的'5'被丢弃(假设你有'8'行)。 – ZER0 2012-07-05 16:23:01

+1

啊哈并不认为这是可能的。长度,现在得到它的工作......谢谢。 – Jo3la 2012-07-05 19:01:58

0

创建上午阵列,并把第一个里面,在这种情况下,我得到的数据,从JSON响应

$.getJSON('/Tool/GetAllActiviesStatus/', 
    var dataFC = new Array(); 
    function (data) { 
     for (var i = 0; i < data.Result.length; i++) { 
      var serie = new Array(data.Result[i].FUNCAO, data.Result[i].QT, true, true); 
      dataFC.push(serie); 
     });