Zan*_*nix 56 javascript arrays 2d push dynamic
我想在Javascript中创建一个二维数组,我将存储坐标(x,y).我不知道我将拥有多少对坐标,因为它们将由用户输入动态生成.
预定义的2d数组的示例:
var Arr=[[1,2],[3,4],[5,6]];
Run Code Online (Sandbox Code Playgroud)
我想我可以使用PUSH方法在数组的末尾添加一条新记录.
如何声明一个空的二维数组,这样当我使用我的第一个Arr.push()时,它将被添加到索引0,而push写入的每个下一个记录都将采用下一个索引?
这可能很容易做到,我只是JS的新手,如果有人能写一个我可以检查的简短工作代码片段,我将不胜感激.谢谢
DJG*_*DJG 73
您可以像这样声明一个常规数组:
var arry = [];
Run Code Online (Sandbox Code Playgroud)
然后,当您有一对要添加到数组的值时,您需要做的就是:
arry.push([value_1, value2]);
Run Code Online (Sandbox Code Playgroud)
是的,第一次调用时arry.push,这对值将放在索引0处.
来自nodejs repl:
> var arry = [];
undefined
> arry.push([1,2]);
1
> arry
[ [ 1, 2 ] ]
> arry.push([2,3]);
2
> arry
[ [ 1, 2 ], [ 2, 3 ] ]
Run Code Online (Sandbox Code Playgroud)
当然,由于javascript是动态类型的,因此没有类型检查器强制该数组保持二维.您必须确保只添加坐标对,而不是执行以下操作:
> arry.push(100);
3
> arry
[ [ 1, 2 ],
[ 2, 3 ],
100 ]
Run Code Online (Sandbox Code Playgroud)
Lor*_*ngi 23
如果你想能够像矩阵[i] [j]那样访问矩阵
我发现在循环中初始化它最方便.
var matrix = [],
cols = 3;
//init the grid matrix
for ( var i = 0; i < cols; i++ ) {
matrix[i] = [];
}
Run Code Online (Sandbox Code Playgroud)
这会给你[[],[],[]]
所以matrix [0] [0] matrix [1] [0]返回undefined而不是错误"Uncaught TypeError:无法设置属性'0'未定义"
Abh*_*avD 22
const matrix = new Array(5).fill(0).map(() => new Array(4).fill(0));
Run Code Online (Sandbox Code Playgroud)
5是行数,4是列数.
Kam*_*ski 14
矩阵m大小为3行5列
[...Array(3)].map(x=>Array(5).fill(0))
Run Code Online (Sandbox Code Playgroud)
[...Array(3)].map(x=>Array(5).fill(0))
Run Code Online (Sandbox Code Playgroud)
删除.fill(0)不初始化为零。奖金
let m = [...Array(3)].map(x=>Array(5).fill(0));
m[1][0] = 2; // second row, first column
m[2][4] = 8; // last element
// print formated array
console.log(JSON.stringify(m)
.replace(/(\[\[)(.*)(\]\])/g,'[\n [$2]\n]').replace(/],/g,'],\n ')
);Run Code Online (Sandbox Code Playgroud)
小智 6
一班轮
let m = 3 // rows
let n = 3 // columns
let array2D = Array(m).fill().map(entry => Array(n))
Run Code Online (Sandbox Code Playgroud)
此实现为每个条目创建一个唯一的子数组。因此设置array2D[0][1] = 'm'不会将每个条目的 [1] 索引设置为“m”
小智 6
这个应该可以工作:
\nconst arr = new Array(5).fill().map(_ => new Array(5).fill(0)) // \xe2\x9c\x85\nRun Code Online (Sandbox Code Playgroud)\n你可能会问我为什么使用地图而不是:
\nconst badArr = new Array(5).fill(new Array(5).fill(0)) // \xe2\x9d\x8c\nRun Code Online (Sandbox Code Playgroud)\n上面示例的问题在于它添加了对传递到 fill 方法中的数组的引用:
\n\n虽然这个效果很好:
\n\n你可以尝试这样的事情: -
var arr = new Array([]);
Run Code Online (Sandbox Code Playgroud)
推送数据:
arr[0][0] = 'abc xyz';
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
211033 次 |
| 最近记录: |