Die*_*ego 1081 javascript arrays multidimensional-array
我一直在网上阅读,有些地方说这是不可能的,有人说它是,然后给出一个例子,其他人反驳这个例子,等等.
如何在JavaScript中声明二维数组?(假设有可能)
我如何访问其成员?(myArray[0][1]或myArray[0,1]?)
Bal*_*an1 1202
var items = [
[1, 2],
[3, 4],
[5, 6]
];
console.log(items[0][0]); // 1
console.log(items[0][1]); // 2
console.log(items[1][0]); // 3
console.log(items[1][1]); // 4
console.log(items);Run Code Online (Sandbox Code Playgroud)
Suf*_*ian 423
您只需将数组中的每个项目都设为一个数组.
var x = new Array(10);
for (var i = 0; i < x.length; i++) {
x[i] = new Array(3);
}
console.log(x);Run Code Online (Sandbox Code Playgroud)
Mat*_*ley 188
与activa的答案类似,这是一个创建n维数组的函数:
function createArray(length) {
var arr = new Array(length || 0),
i = length;
if (arguments.length > 1) {
var args = Array.prototype.slice.call(arguments, 1);
while(i--) arr[length-1 - i] = createArray.apply(this, args);
}
return arr;
}
createArray(); // [] or new Array()
createArray(2); // new Array(2)
createArray(3, 2); // [new Array(2),
// new Array(2),
// new Array(2)]
Run Code Online (Sandbox Code Playgroud)
Phi*_*ert 81
Javascript只有一维数组,但你可以像其他人指出的那样构建数组数组.
以下函数可用于构建固定尺寸的二维数组:
function Create2DArray(rows) {
var arr = [];
for (var i=0;i<rows;i++) {
arr[i] = [];
}
return arr;
}
Run Code Online (Sandbox Code Playgroud)
列数并不重要,因为在使用之前不需要指定数组的大小.
然后你可以打电话:
var arr = Create2DArray(100);
arr[50][2] = 5;
arr[70][5] = 7454;
// ...
Run Code Online (Sandbox Code Playgroud)
小智 76
最简单的方法:
var myArray = [[]];
Run Code Online (Sandbox Code Playgroud)
zur*_*fyx 55
Array.from(Array(2), () => new Array(4))
Run Code Online (Sandbox Code Playgroud)
图2和4分别是第一和第二尺寸.
我们正在使用Array.from,它可以采用类似数组的参数和每个元素的可选映射.
Array.from(arrayLike [,mapFn [,thisArg]])
var arr = Array.from(Array(2), () => new Array(4));
arr[0][0] = 'foo';
console.info(arr);Run Code Online (Sandbox Code Playgroud)
同样的技巧可用于创建包含1 ... N的JavaScript数组
n = 10,000)Array(2).fill(null).map(() => Array(4))
Run Code Online (Sandbox Code Playgroud)
性能下降是因为我们必须初始化第一个维度值才能运行.map.请记住,Array在您通过.fill或直接赋值之前, 不会分配位置.
var arr = Array(2).fill(null).map(() => Array(4));
arr[0][0] = 'foo';
console.info(arr);Run Code Online (Sandbox Code Playgroud)
为什么这不起作用?
Array(2).fill(Array(4)); // BAD! Rows are copied by reference
Run Code Online (Sandbox Code Playgroud)
虽然它确实返回了显然需要的二维数组([ [ <4 empty items> ], [ <4 empty items> ] ]),但是有一个问题:第一维数组已经通过引用复制了.这意味着arr[0][0] = 'foo'实际上会改变两行而不是一行.
var arr = Array(2).fill(Array(4));
arr[0][0] = 'foo';
console.info(arr);
console.info(arr[0][0], arr[1][0]);Run Code Online (Sandbox Code Playgroud)
Jam*_*aro 44
有些人说这是不可能的原因是因为二维数组实际上只是一个数组数组.这里的其他注释提供了在JavaScript中创建二维数组的完全有效的方法,但最纯粹的观点是您有一维对象数组,每个对象都是由两个元素组成的一维数组.
所以,这是观点冲突的原因.
Ser*_*reu 32
很少有人展示push的使用:
为了带来新的东西,我将向您展示如何用一些值初始化矩阵,例如:0或空字符串"".
提醒一下,如果你有一个10元素数组,在javascript中最后一个索引将是9!
function matrix( rows, cols, defaultValue){
var arr = [];
// Creates all lines:
for(var i=0; i < rows; i++){
// Creates an empty line
arr.push([]);
// Adds cols to the empty line:
arr[i].push( new Array(cols));
for(var j=0; j < cols; j++){
// Initializes:
arr[i][j] = defaultValue;
}
}
return arr;
}
Run Code Online (Sandbox Code Playgroud)
用法示例:
x = matrix( 2 , 3,''); // 2 lines, 3 cols filled with empty string
y = matrix( 10, 5, 0);// 10 lines, 5 cols filled with 0
Run Code Online (Sandbox Code Playgroud)
dom*_*ukk 27
双内胆:
var a = [];
while(a.push([]) < 10);
Run Code Online (Sandbox Code Playgroud)
它将生成一个长度为10的数组a,其中包含数组.(Push将一个元素添加到数组并返回新的长度)
Fra*_*ndi 24
最诚实的答案似乎是
var nrows = ~~(Math.random() * 10);
var ncols = ~~(Math.random() * 10);
console.log(`rows:${nrows}`);
console.log(`cols:${ncols}`);
var matrix = new Array(nrows).fill(0).map(row => new Array(ncols).fill(0));
console.log(matrix);Run Code Online (Sandbox Code Playgroud)
注意我们不能直接填充行,因为fill使用浅拷贝构造函数,因此所有行都将共享相同的内存...这里的示例演示了如何共享每一行(取自其他答案):
// DON'T do this: each row in arr, is shared
var arr = Array(2).fill(Array(4));
arr[0][0] = 'foo'; // also modifies arr[1][0]
console.info(arr);
Run Code Online (Sandbox Code Playgroud)
Chi*_*ito 18
最简单的方法:
var arr = [];
var arr1 = ['00','01'];
var arr2 = ['10','11'];
var arr3 = ['20','21'];
arr.push(arr1);
arr.push(arr2);
arr.push(arr3);
alert(arr[0][1]); // '01'
alert(arr[1][1]); // '11'
alert(arr[2][0]); // '20'
Run Code Online (Sandbox Code Playgroud)
Bin*_*esh 18
这就是我所取得的成就:
var appVar = [[]];
appVar[0][4] = "bineesh";
appVar[0][5] = "kumar";
console.log(appVar[0][4] + appVar[0][5]);
console.log(appVar);Run Code Online (Sandbox Code Playgroud)
这拼写了我bineeshkumar
tj1*_*111 16
二维数组的创建方式与单维数组相同.你就像访问它们一样array[0][1].
var arr = [1, 2, [3, 4], 5];
alert (arr[2][1]); //alerts "4"
Run Code Online (Sandbox Code Playgroud)
Kam*_*ski 15
今天 2020.02.05 我在 Chrome v79.0、Safari v13.0.4 和 Firefox v72.0 上对 MacOs HighSierra 10.13.6 进行测试,以选择解决方案。
非初始化二维数组的结论
{}/arr[[i,j]](N)对于大数组和小数组最快,看起来它是大稀疏数组的不错选择for-[]/while(A,G) 的解决方案速度快,是小型阵列的不错选择。for-[](B,C)速度很快,它们是大阵列的不错选择Array..map/from/fill(I,J,K,L,M) 的解决方案对于小数组来说非常慢,对于大数组来说非常快for-Array(n)(B,C) 在 safari 上比for-[](A)慢得多for-[](A)大阵列在所有浏览器上都很慢初始化二维数组的结论
for/while(A,B,C,D,E,G) 的解决方案对于所有浏览器上的小数组来说是最快/相当快的for对于所有浏览器上的大数组,基于(A,B,C,E) 的解决方案是最快/相当快的Array..map/from/fill对于所有浏览器上的小数组,基于(I,J,K,L,M) 的解决方案是中等快或慢{}/arr[[i,j]]对于所有浏览器上的大小数组,深奥的解决方案(N) 是最慢的测试未填充(初始化)输出数组的解决方案
我们测试解决方案的速度
function A(r) {
var arr = [];
for (var i = 0; i < r; i++) arr[i] = [];
return arr;
}
function B(r, c) {
var arr = new Array(r);
for (var i = 0; i < arr.length; i++) arr[i] = new Array(c);
return arr;
}
function C(r, c) {
var arr = Array(r);
for (var i = 0; i < arr.length; i++) arr[i] = Array(c);
return arr;
}
function D(r, c) {
// strange, but works
var arr = [];
for (var i = 0; i < r; i++) {
arr.push([]);
arr[i].push(Array(c));
}
return arr;
}
function E(r, c) {
let array = [[]];
for (var x = 0; x < c; x++) {
array[x] = [];
for (var y = 0; y < r; y++) array[x][y] = [0];
}
return array;
}
function F(r, c) {
var makeArray = function(dims, arr) {
if (dims[1] === undefined) {
return Array(dims[0]);
}
arr = Array(dims[0]);
for (var i = 0; i < dims[0]; i++) {
arr[i] = Array(dims[1]);
arr[i] = makeArray(dims.slice(1), arr[i]);
}
return arr;
}
return makeArray([r, c]);
}
function G(r) {
var a = [];
while (a.push([]) < r);
return a;
}
function H(r,c) {
function createArray(length) {
var arr = new Array(length || 0),
i = length;
if (arguments.length > 1) {
var args = Array.prototype.slice.call(arguments, 1);
while(i--) arr[length-1 - i] = createArray.apply(this, args);
}
return arr;
}
return createArray(r,c);
}
function I(r, c) {
return [...Array(r)].map(x => Array(c));
}
function J(r, c) {
return Array(r).fill(0).map(() => Array(c));
}
function K(r, c) {
return Array.from(Array(r), () => Array(c));
}
function L(r, c) {
return Array.from({length: r}).map(e => Array(c));
}
function M(r, c) {
return Array.from({length: r}, () => Array.from({length: c}, () => {}));
}
function N(r, c) {
return {}
}
// -----------------------------------------------
// SHOW
// -----------------------------------------------
log = (t, f) => {
let A = f(3, 4); // create array with 3 rows and 4 columns
A[1][2] = 6 // 2-nd row 3nd column set to 6
console.log(`${t}[1][2]: ${A[1][2]}, full: ${JSON.stringify(A).replace(/null/g,'x')}`);
}
log2 = (t, f) => {
let A = f(3, 4); // create array with 3 rows and 4 columns
A[[1,2]] = 6 // 2-nd row 3nd column set to 6
console.log(`${t}[1][2]: ${A[[1,2]]}, full: ${JSON.stringify(A).replace(/null/g,'x')}`);
}
log('A', A);
log('B', B);
log('C', C);
log('D', D);
log('E', E);
log('F', F);
log('G', G);
log('H', H);
log('I', I);
log('J', J);
log('K', K);
log('L', L);
log('M', M);
log2('N', N);Run Code Online (Sandbox Code Playgroud)
This is presentation of solutions - not benchmarkRun Code Online (Sandbox Code Playgroud)
测试填充(初始化)输出数组的解决方案
我们测试解决方案的速度
function A(r, c, def) {
var arr = [];
for (var i = 0; i < r; i++) arr[i] = Array(c).fill(def);
return arr;
}
function B(r, c, def) {
var arr = new Array(r);
for (var i = 0; i < arr.length; i++) arr[i] = new Array(c).fill(def);
return arr;
}
function C(r, c, def) {
var arr = Array(r);
for (var i = 0; i < arr.length; i++) arr[i] = Array(c).fill(def);
return arr;
}
function D(r, c, def) {
// strange, but works
var arr = [];
for (var i = 0; i < r; i++) {
arr.push([]);
arr[i].push(Array(c));
}
for (var i = 0; i < r; i++) for (var j = 0; j < c; j++) arr[i][j]=def
return arr;
}
function E(r, c, def) {
let array = [[]];
for (var x = 0; x < c; x++) {
array[x] = [];
for (var y = 0; y < r; y++) array[x][y] = def;
}
return array;
}
function F(r, c, def) {
var makeArray = function(dims, arr) {
if (dims[1] === undefined) {
return Array(dims[0]).fill(def);
}
arr = Array(dims[0]);
for (var i = 0; i < dims[0]; i++) {
arr[i] = Array(dims[1]);
arr[i] = makeArray(dims.slice(1), arr[i]);
}
return arr;
}
return makeArray([r, c]);
}
function G(r, c, def) {
var a = [];
while (a.push(Array(c).fill(def)) < r);
return a;
}
function H(r,c, def) {
function createArray(length) {
var arr = new Array(length || 0),
i = length;
if (arguments.length > 1) {
var args = Array.prototype.slice.call(arguments, 1);
while(i--) arr[length-1 - i] = createArray.apply(this, args).fill(def);
}
return arr;
}
return createArray(r,c);
}
function I(r, c, def) {
return [...Array(r)].map(x => Array(c).fill(def));
}
function J(r, c, def) {
return Array(r).fill(0).map(() => Array(c).fill(def));
}
function K(r, c, def) {
return Array.from(Array(r), () => Array(c).fill(def));
}
function L(r, c, def) {
return Array.from({length: r}).map(e => Array(c).fill(def));
}
function M(r, c, def) {
return Array.from({length: r}, () => Array.from({length: c}, () => def));
}
function N(r, c, def) {
let arr={};
for (var i = 0; i < r; i++) for (var j = 0; j < c; j++) arr[[i,j]]=def;
return arr;
}
// -----------------------------------------------
// SHOW
// -----------------------------------------------
log = (t, f) => {
let A = f(1000,1000,7); // create array with 1000 rows and 1000 columns,
// each array cell initilised by 7
A[800][900] = 5 // 800nd row and 901nd column set to 5
console.log(`${t}[1][2]: ${A[1][2]}, ${t}[800][901]: ${A[800][900]}`);
}
log2 = (t, f) => {
let A = f(1000,1000,7); // create array with 1000 rows and 1000 columns,
// each array cell initilised by 7
A[[800,900]] = 5 // 800nd row 900nd column set to 5
console.log(`${t}[1][2]: ${A[[1,2]]}, ${t}[800][900]: ${A[[800,900]]}`);
}
log('A', A);
log('B', B);
log('C', C);
log('D', D);
log('E', E);
log('F', F);
log('G', G);
log('H', H);
log('I', I);
log('J', J);
log('K', K);
log('L', L);
log('M', M);
log2('N', N);Run Code Online (Sandbox Code Playgroud)
This is presentation of solutions - not benchmarkRun Code Online (Sandbox Code Playgroud)
小智 14
我不确定是否有人回答过此问题,但我发现这对我很有帮助 -
var array = [[,],[,]]
Run Code Online (Sandbox Code Playgroud)
例如:
var a = [[1,2],[3,4]]
Run Code Online (Sandbox Code Playgroud)
例如,对于二维数组.
pri*_*ime 13
要在javaScript中创建2D数组,我们可以先创建一个Array,然后添加Arrays作为它的元素.此方法将返回具有给定行数和列数的2D数组.
function Create2DArray(rows,columns) {
var x = new Array(rows);
for (var i = 0; i < rows; i++) {
x[i] = new Array(columns);
}
return x;
}
Run Code Online (Sandbox Code Playgroud)
创建数组使用此方法如下所示.
var array = Create2DArray(10,20);
Run Code Online (Sandbox Code Playgroud)
Jus*_*hms 12
要创建一个非稀疏的"2D"数组(x,y),其中所有索引都是可寻址的,并且值设置为null:
let 2Darray = new Array(x).fill(null).map(item =>(new Array(y).fill(null)))
Run Code Online (Sandbox Code Playgroud)
奖金"3D"数组(x,y,z)
let 3Darray = new Array(x).fill(null).map(item=>(new Array(y).fill(null)).map(item=>Array(z).fill(null)))
Run Code Online (Sandbox Code Playgroud)
关于这一点的变化和更正已经在评论中以及在回答这个问题的各个点上提到,但不作为实际答案,所以我在这里添加它.
应该注意的是(类似于大多数其他答案),这具有O(x*y)时间复杂度,因此它可能不适合非常大的阵列.
gue*_*est 12
要创建一个 4x6 数组,只需执行以下操作
const x = [...new Array(6)].map(elem => new Array(4))
Run Code Online (Sandbox Code Playgroud)
从一个空数组开始,而不是填充 w 个随机值通常是一个好习惯。(您通常将数组声明为const x = []1D,因此最好在 2D 中将 w 设为空。)
小智 11
Array(m).fill(v).map(() => Array(n).fill(v))
Run Code Online (Sandbox Code Playgroud)
可以创建一个2维阵列m x n与初始值m和n可以是任意数字v可以是任何值string,number,undefined。
一种方法可以是 var a = [m][n]
Tim*_*ton 10
在JavaScript 1.7及更高版本中,您可以使用数组解析来创建二维数组.您还可以在填充数组时过滤和/或操作条目,而不必使用循环.
var rows = [1, 2, 3];
var cols = ["a", "b", "c", "d"];
var grid = [ for (r of rows) [ for (c of cols) r+c ] ];
/*
grid = [
["1a","1b","1c","1d"],
["2a","2b","2c","2d"],
["3a","3b","3c","3d"]
]
*/
Run Code Online (Sandbox Code Playgroud)
您可以创建所需的任何n x m数组,并通过调用使用默认值填充它
var default = 0; // your 2d array will be filled with this value
var n_dim = 2;
var m_dim = 7;
var arr = [ for (n of Array(n_dim)) [ for (m of Array(m_dim) default ]]
/*
arr = [
[0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0],
]
*/
Run Code Online (Sandbox Code Playgroud)
可以在此处找到更多示例和文档.
请注意,这不是标准功能.
dev*_*oki 10
以下示例定义了一个名为activities的二维数组:
\n let activities = [\n ['Work', 9],\n ['Eat', 1],\n ['Commute', 2],\n ['Play Game', 1],\n ['Sleep', 7]\n ];\nRun Code Online (Sandbox Code Playgroud)\n在活动数组中,第一个维度表示活动,第二个维度显示每个维度每天花费的小时数。
\n要在控制台中显示活动数组,请使用 console.table() 方法,如下所示:
\nconsole.table(activities);\nRun Code Online (Sandbox Code Playgroud)\n下图说明了输出:
\n\n\nRun Code Online (Sandbox Code Playgroud)\n\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82 (index) \xe2\x94\x82 0 \xe2\x94\x82 1 \xe2\x94\x82\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4\n\xe2\x94\x82 0 \xe2\x94\x82 'Work' \xe2\x94\x82 9 \xe2\x94\x82\n\xe2\x94\x82 1 \xe2\x94\x82 'Eat' \xe2\x94\x82 1 \xe2\x94\x82\n\xe2\x94\x82 2 \xe2\x94\x82 'Commute' \xe2\x94\x82 2 \xe2\x94\x82\n\xe2\x94\x82 3 \xe2\x94\x82 'Play Game' \xe2\x94\x82 1 \xe2\x94\x82\n\xe2\x94\x82 4 \xe2\x94\x82 'Sleep' \xe2\x94\x82 7 \xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\n
请注意,该(index)列用于指示内部数组的索引的说明。
要访问多维数组的元素,首先使用方括号访问返回内部数组的外部数组的元素;然后使用另一个方括号访问内部数组的元素。
\n以下示例返回上面的活动数组中第一个内部数组的第二个元素:
\nconsole.log(activities[0][1]); // 9\nRun Code Online (Sandbox Code Playgroud)\n向 JavaScript 多维数组添加元素
\n您可以使用 Array 方法(例如push()和 )splice()来操作多维数组的元素。
例如,要在多维数组的末尾添加新元素,请使用push()以下方法:
activities.push(['Study',2]);\nRun Code Online (Sandbox Code Playgroud)\n\n\nRun Code Online (Sandbox Code Playgroud)\n\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82 (index) \xe2\x94\x82 0 \xe2\x94\x82 1 \xe2\x94\x82\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4\n\xe2\x94\x82 0 \xe2\x94\x82 'Work' \xe2\x94\x82 9 \xe2\x94\x82\n\xe2\x94\x82 1 \xe2\x94\x82 'Eat' \xe2\x94\x82 1 \xe2\x94\x82\n\xe2\x94\x82 2 \xe2\x94\x82 'Commute' \xe2\x94\x82 2 \xe2\x94\x82\n\xe2\x94\x82 3 \xe2\x94\x82 'Play Game' \xe2\x94\x82 1 \xe2\x94\x82\n\xe2\x94\x82 4 \xe2\x94\x82 'Sleep' \xe2\x94\x82 7 \xe2\x94\x82\n\xe2\x94\x82 5 \xe2\x94\x82 'Study' \xe2\x94\x82 2 \xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\n
要在数组中间插入元素,可以使用该splice()方法。下面在活动数组的第二个位置插入一个元素:
activities.splice(1, 0, ['Programming', 2]);\nRun Code Online (Sandbox Code Playgroud)\n\n\nRun Code Online (Sandbox Code Playgroud)\n\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82 (index) \xe2\x94\x82 0 \xe2\x94\x82 1 \xe2\x94\x82\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4\n\xe2\x94\x82 0 \xe2\x94\x82 'Work' \xe2\x94\x82 9 \xe2\x94\x82\n\xe2\x94\x82 1 \xe2\x94\x82 'Programming' \xe2\x94\x82 2 \xe2\x94\x82\n\xe2\x94\x82 2 \xe2\x94\x82 'Eat' \xe2\x94\x82 1 \xe2\x94\x82\n\xe2\x94\x82 3 \xe2\x94\x82 'Commute' \xe2\x94\x82 2 \xe2\x94\x82\n\xe2\x94\x82 4 \xe2\x94\x82 'Play Game' \xe2\x94\x82 1 \xe2\x94\x82\n\xe2\x94\x82 5 \xe2\x94\x82 'Sleep' \xe2\x94\x82 7 \xe2\x94\x82\n\xe2\x94\x82 6 \xe2\x94\x82 'Study' \xe2\x94\x82 2 \xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\n
此示例计算每项活动所花费的小时数百分比,并将该百分比附加到内部数组。
\nactivities.forEach(activity => {\n let percentage = ((activity[1] / 24) * 100).toFixed();\n activity[2] = percentage + '%';\n});\nRun Code Online (Sandbox Code Playgroud)\n\n\nRun Code Online (Sandbox Code Playgroud)\n\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82 (index) \xe2\x94\x82 0 \xe2\x94\x82 1 \xe2\x94\x82 2 \xe2\x94\x82\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4\n\xe2\x94\x82 0 \xe2\x94\x82 'Work' \xe2\x94\x82 9 \xe2\x94\x82 '38%' \xe2\x94\x82\n\xe2\x94\x82 1 \xe2\x94\x82 'Programming' \xe2\x94\x82 2 \xe2\x94\x82 '8%' \xe2\x94\x82\n\xe2\x94\x82 2 \xe2\x94\x82 'Eat' \xe2\x94\x82 1 \xe2\x94\x82 '4%' \xe2\x94\x82\n\xe2\x94\x82 3 \xe2\x94\x82 'Commute' \xe2\x94\x82 2 \xe2\x94\x82 '8%' \xe2\x94\x82\n\xe2\x94\x82 4 \xe2\x94\x82 'Play Game' \xe2\x94\x82 1 \xe2\x94\x82 '4%' \xe2\x94\x82\n\xe2\x94\x82 5 \xe2\x94\x82 'Sleep' \xe2\x94\x82 7 \xe2\x94\x82 '29%' \xe2\x94\x82\n\xe2\x94\x82 6 \xe2\x94\x82 'Study' \xe2\x94\x82 2 \xe2\x94\x82 '8%' \xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\n
从 JavaScript 多维数组中删除元素
\n要从数组中删除元素,可以使用pop()orsplice()方法。
例如,以下语句删除活动数组的最后一个元素:
\nactivities.pop();\nRun Code Online (Sandbox Code Playgroud)\n\n\nRun Code Online (Sandbox Code Playgroud)\n\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82 (index) \xe2\x94\x82 0 \xe2\x94\x82 1 \xe2\x94\x82 2 \xe2\x94\x82\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4\n\xe2\x94\x82 0 \xe2\x94\x82 'Work' \xe2\x94\x82 9 \xe2\x94\x82 '38%' \xe2\x94\x82\n\xe2\x94\x82 1 \xe2\x94\x82 'Programming' \xe2\x94\x82 2 \xe2\x94\x82 '8%' \xe2\x94\x82\n\xe2\x94\x82 2 \xe2\x94\x82 'Eat' \xe2\x94\x82 1 \xe2\x94\x82 '4%' \xe2\x94\x82\n\xe2\x94\x82 3 \xe2\x94\x82 'Commute' \xe2\x94\x82 2 \xe2\x94\x82 '8%' \xe2\x94\x82\n\xe2\x94\x82 4 \xe2\x94\x82 'Play Game' \xe2\x94\x82 1 \xe2\x94\x82 '4%' \xe2\x94\x82\n\xe2\x94\x82 5 \xe2\x94\x82 'Sleep' \xe2\x94\x82 7 \xe2\x94\x82 '29%' \xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\n
同样,可以使用pop()方法从多维数组的内部数组中删除元素。以下示例从活动数组的内部数组中删除百分比元素。
activities.forEach((activity) => {\n activity.pop(2);\n});\nRun Code Online (Sandbox Code Playgroud)\n\n\nRun Code Online (Sandbox Code Playgroud)\n\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82 (index) \xe2\x94\x82 0 \xe2\x94\x82 1 \xe2\x94\x82\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4\n\xe2\x94\x82 0 \xe2\x94\x82 'Work' \xe2\x94\x82 9 \xe2\x94\x82\n\xe2\x94\x82 1 \xe2\x94\x82 'Programming' \xe2\x94\x82 2 \xe2\x94\x82\n\xe2\x94\x82 2 \xe2\x94\x82 'Eat' \xe2\x94\x82 1 \xe2\x94\x82\n\xe2\x94\x82 3 \xe2\x94\x82 'Commute' \xe2\x94\x82 2 \xe2\x94\x82\n\xe2\x94\x82 4 \xe2\x94\x82 'Play Game' \xe2\x94\x82 1 \xe2\x94\x82\n\xe2\x94\x82 5 \xe2\x94\x82 'Sleep' \xe2\x94\x82 7 \xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\n
迭代 JavaScript 多维数组的元素
\n要迭代多维数组,请使用嵌套for循环,如下例所示。
// loop the outer array\n\nfor (let i = 0; i < activities.length; i++) {\n // get the size of the inner array\n var innerArrayLength = activities[i].length;\n // loop the inner array\n for (let j = 0; j < innerArrayLength; j++) {\n console.log('[' + i + ',' + j + '] = ' + activities[i][j]);\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n第一个循环迭代外部数组的元素,嵌套循环迭代内部数组的元素。
\n下面显示了控制台中脚本的输出:
\n\n\nRun Code Online (Sandbox Code Playgroud)\n[0,0] = Work\n[0,1] = 9\n[1,0] = Eat\n[1,1] = 1\n[2,0] = Commute\n[2,1] = 2\n[3,0] = Play Game\n[3,1] = 1\n[4,0] = Sleep\n[4,1] = 7\n[5,0] = Study\n[5,1] = 2\n
或者您可以使用该forEach()方法两次:
activities.forEach((activity) => {\n activity.forEach((data) => {\n console.log(data);\n });\n});\nRun Code Online (Sandbox Code Playgroud)\n\n\nRun Code Online (Sandbox Code Playgroud)\nWork\n9\nEat\n1\nCommute\n2\nPlay Game\n1\nSleep\n7\nStudy\n2\n
我的方法与@Bineesh的答案非常相似,但采用了更为通用的方法.
您可以按如下方式声明double数组:
var myDoubleArray = [[]];
Run Code Online (Sandbox Code Playgroud)
并以下列方式存储和访问内容:
var testArray1 = [9,8]
var testArray2 = [3,5,7,9,10]
var testArray3 = {"test":123}
var index = 0;
myDoubleArray[index++] = testArray1;
myDoubleArray[index++] = testArray2;
myDoubleArray[index++] = testArray3;
console.log(myDoubleArray[0],myDoubleArray[1][3], myDoubleArray[2]['test'],)
Run Code Online (Sandbox Code Playgroud)
这将打印预期的输出
[ 9, 8 ] 9 123
Run Code Online (Sandbox Code Playgroud)
对于一个班轮爱好者Array.from()
// creates 8x8 array filed with "0"
const arr2d = Array.from({ length: 8 }, () => Array.from({ length: 8 }, () => "0"));
Run Code Online (Sandbox Code Playgroud)
另一个(来自dmitry_romanov的评论)使用Array().fill()
// creates 8x8 array filed with "0"
const arr2d = Array(8).fill(0).map(() => Array(8).fill("0"));
Run Code Online (Sandbox Code Playgroud)
只有在运行时才知道数组的行和列大小,然后可以使用以下方法创建动态二维数组。
var num = '123456';
var row = 3; // Known at run time
var col = 2; // Known at run time
var i = 0;
var array2D = [[]];
for(var r = 0; r < row; ++r)
{
array2D[r] = [];
for(var c = 0; c < col; ++c)
{
array2D[r][c] = num[i++];
}
}
console.log(array2D);
// [[ '1', '2' ],
// [ '3', '4' ],
// [ '5', '6' ]]
console.log(array2D[2][1]); // 6Run Code Online (Sandbox Code Playgroud)
我发现下面是最简单的方法:
var array1 = [[]];
array1[0][100] = 5;
alert(array1[0][100]);
alert(array1.length);
alert(array1[0].length);
Run Code Online (Sandbox Code Playgroud)
Javascript不支持二维数组,相反,我们将一个数组存储在另一个数组中,然后根据要访问该数组的位置从该数组中获取数据。请记住,数组计算从ZERO开始。
代码示例:
/* Two dimensional array that's 5 x 5
C0 C1 C2 C3 C4
R0[1][1][1][1][1]
R1[1][1][1][1][1]
R2[1][1][1][1][1]
R3[1][1][1][1][1]
R4[1][1][1][1][1]
*/
var row0 = [1,1,1,1,1],
row1 = [1,1,1,1,1],
row2 = [1,1,1,1,1],
row3 = [1,1,1,1,1],
row4 = [1,1,1,1,1];
var table = [row0,row1,row2,row3,row4];
console.log(table[0][0]); // Get the first item in the array
Run Code Online (Sandbox Code Playgroud)
ES6+、ES2015+ 可以用更简单的方式做到这一点
创建 3 x 2 数组,填充为 true
[...Array(3)].map(item => Array(2).fill(true))
Run Code Online (Sandbox Code Playgroud)
我必须制作一个灵活的数组函数,以便根据需要向其中添加“记录”,并能够对其进行更新并进行所需的任何计算,然后再将其发送到数据库进行进一步处理。这是代码,希望对您有所帮助:)。
function Add2List(clmn1, clmn2, clmn3) {
aColumns.push(clmn1,clmn2,clmn3); // Creates array with "record"
aLine.splice(aPos, 0,aColumns); // Inserts new "record" at position aPos in main array
aColumns = []; // Resets temporary array
aPos++ // Increments position not to overlap previous "records"
}
Run Code Online (Sandbox Code Playgroud)
随时优化和/或指出任何错误:)
我发现这是制作二维数组的一种快速方法。
function createArray(x, y) {
return Array.apply(null, Array(x)).map(e => Array(y));
}
Run Code Online (Sandbox Code Playgroud)
您也可以轻松地将此功能转换为ES5功能。
function createArray(x, y) {
return Array.apply(null, Array(x)).map(function(e) {
return Array(y);
});
}
Run Code Online (Sandbox Code Playgroud)
为何起作用:new Array(n)构造函数创建一个具有原型Array.prototype的对象,然后分配该对象的length,从而导致未填充的数组。由于缺少实际成员,因此我们无法在其Array.prototype.map上运行该功能。
但是,当您向构造函数提供多个参数时(例如,当您提供时)Array(1, 2, 3, 4),构造函数将使用该对象正确arguments实例化并填充一个Array对象。
因此,我们可以使用Array.apply(null, Array(x)),因为该apply函数会将参数传播到构造函数中。为了澄清起见,做Array.apply(null, Array(3))等同于做Array(null, null, null)。
现在我们已经创建了一个实际的填充数组,我们所需要做的就是调用map并创建第二层(y)。
小智 5
在下方,创建一个5x5矩阵,并用 null
var md = [];
for(var i=0; i<5; i++) {
md.push(new Array(5).fill(null));
}
console.log(md);Run Code Online (Sandbox Code Playgroud)
小智 5
一个用于创建填充为 0 的 am*n 二维数组的衬垫。
new Array(m).fill(new Array(n).fill(0));
Run Code Online (Sandbox Code Playgroud)
var playList = [
['I Did It My Way', 'Frank Sinatra'],
['Respect', 'Aretha Franklin'],
['Imagine', 'John Lennon'],
['Born to Run', 'Bruce Springsteen'],
['Louie Louie', 'The Kingsmen'],
['Maybellene', 'Chuck Berry']
];
function print(message) {
document.write(message);
}
function printSongs( songs ) {
var listHTML;
listHTML = '<ol>';
for ( var i = 0; i < songs.length; i += 1) {
listHTML += '<li>' + songs[i][0] + ' by ' + songs[i][1] + '</li>';
}
listHTML += '</ol>';
print(listHTML);
}
printSongs(playList);Run Code Online (Sandbox Code Playgroud)
还有另一种解决方案,它不会强制您预先定义二维数组的大小,而且非常简洁。
var table = {}
table[[1,2]] = 3 // Notice the double [[ and ]]
console.log(table[[1,2]]) // -> 3Run Code Online (Sandbox Code Playgroud)
这样做是因为,[1,2]转化为一个字符串,作为字符串键的table对象。
| 归档时间: |
|
| 查看次数: |
1926204 次 |
| 最近记录: |