如何用js push() 初始化一个二维数组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用js push() 初始化一个二维数组相关的知识,希望对你有一定的参考价值。

小妹刚学习js,请指导。
我想用这个函数初始化一个二维数组,由于是动态的,所以不可以直接初始化。
如果不可以,有没有其余的方法。
var a = new Array();
var b = new Array();

a.push(upload);
a.push(speedup);
b.push(a);
这样可以保证每一个b 中的元素都是二维的吗?
确切来讲 b[0]=a[0],a[1]
b[1]=a[2],a[3]依次类推,这样可以达到这个效果吗?

二维数组应该这样定义: var b = new Array(new Array);
var a = new Array();
然后一个for循环:
for(i=0;i<a.length-1;i+=2)
b[i/2]=[a[i],a[i+1]];


就OK了。
参考技术A

用push方式首先二维数组:

var arr = [];
var aNum = [1,2,3,4,5,6,7,8];
var len=aNum.length;
for(var i=0;i<len/2;i++)
    arr.push(aNum.splice(0,2))

参考技术B 我也不知道,为什么不去看js的API呢?学习要有主动性嘛。。。

如何用不同的默认值初始化多维数组

【中文标题】如何用不同的默认值初始化多维数组【英文标题】:How to initialize multi-dimensional array with different default value 【发布时间】:2013-02-11 07:40:04 【问题描述】:

我正在尝试使用 -1 初始化整数值的二维数组。当我创建一个新数组时,它会自动填充为 0。 我知道我可以用 2 个循环来完成它,但我想在构建数组时应该有某种方法可以做到这一点(所以我不必经历两次),这样就可以代替 0,提供值将被插入。可能吗? 如果不是在数组的初始构建期间,是否有其他时间或代码节省方式,或者我是否坚持使用 2 个循环?

【问题讨论】:

这些数组有多大? 数组大小取决于创建它的函数的输入,我忘了提及。直接初始化是不可能的。 【参考方案1】:

在Python中,这种二维数组初始化是错误的:

mat = [[0] * 5] * 5  # wrong
mat = [[0] * 5] for _ in range(5)]  # correct

因为你多次复制内部数组的引用,改变其中一个最终会改变所有。

mat[0][0] = 1
print(mat)
# 1 0 0 0 0
# 1 0 0 0 0
# 1 0 0 0 0
# 1 0 0 0 0
# 1 0 0 0 0

在 C# 中,我们也有类似的问题。

var mat = Enumerable.Repeat(Enumerable.Repeat(0, 5).ToArray(), 5).ToArray();

由于数组是引用类型,所以外面的Repeat()实际上是在复制内部数组的引用。

如果您确实需要在不使用 for 循环的情况下创建和初始化多维数组,那么自定义帮助类可能会有所帮助:

static class HelperFunctions

    public static T[][] Repeat<T>(this T[] arr, int count)
    
        var res = new T[count][];
        for (int i = 0; i < count; i++)
        
            //arr.CopyTo(res[i], 0);
            res[i] = (T[])arr.Clone();
        
        return res;
    

那如果你想用的话:

using static HelperFunctions;

var mat = Enumerable.Repeat(0, 5).ToArray().Repeat(5);

这样就可以了。

【讨论】:

【参考方案2】:

试试这样的:int[,] array2D = new int[,] -1 , -1 , -1 , -1 ;

或带有维度int[,] array2D = new int[4,2] -1,-1 , -1,-1 , -1,-1 , -1,-1 ;

【讨论】:

不确定为什么 -1 - 这对于小型二维数组完全有效,并且在这种情况下是最佳选择。来自我的 +1...(不过,如果数组很大,这将很快停止维护) 我也一样,我忘了提到原始问题中的重要细节。 没关系,@ReedCopsey 很好地回答了你的问题,我猜【参考方案3】:

对于多维数组,循环很可能是最好的方法,除非数组小到可以直接在代码中初始化。

如果您使用jagged array,您可以初始化第一个子数组,然后使用Array.Copy 将这些值复制到彼此的子数组中。这仍然需要对第一个子数组进行一次迭代,然后对 N-1 个外部数组进行一次循环,但复制操作将比循环更快。

【讨论】:

我确实在使用多维数组。好吧,我想那时我将不得不走“老派”的道路。

以上是关于如何用js push() 初始化一个二维数组的主要内容,如果未能解决你的问题,请参考以下文章

如何用js把https地址生成二维码

如何用VB给二维数组排序

C语言中如何用gets();语句来接收一个二维数组

c++如何用指针指向二维数组

在C语言中如何用把二维数组中的一行贼给一维数组?

如何用c语言给输入的二维数组每一行排序