js多维数组的获取与渲染
来源:互联网 发布:python keras 彩票 编辑:程序博客网 时间:2024/06/07 02:29
一、多维数组
数组是具有相同数据类型且按一定次序排列的一组变量的集合体。构成一个数组的所有变量称为数组元素,数组的名字称为数组名,每一个数组元素由数组名及其在数组中的位置(下标)确定。数组按下标个数分为:一维数组,二维数组和三维数组等,二维及以上数组统称为多维数组
在数组名后有两对方括号的数组被称为二维数组,同理,数组名后有n对方括号的数组被称为n维数组,二维及以上的数组被称为多维数组。
定义形式:
类型标识符 数组名[正整型常量表达式1]【正整型常量表达式2】…
多维数组定义的数组元素个数为
正整型常量表达式1*整型常量表达式2…
例如
int x[2][3]
是一个整形二维数组,共有6个元素。它们按顺序分别是
X[0][0],x[0][1],x[0][2],x[1][0],x[1][1],x[1][2]
不能用变量表示数组长度
数组名后面应该用[]
不能用负数表示数组长度
不能用变量表达式表示数组长度
多维数组存储形式
按x[0][0]
x[0][1]
x[0][2]
x[1][0]
x[1][1]
x[1][2]
依次存放
多维数组的引用
与一维数组一样,不能整体引用一个多维数组,只能引用其元素,引用格式类似一维数组
二维数组的引用形式为
数组名[下标1][下标2]
三维数组的引用形式为
数组名[下标1][下标2] [下标3]
其中,下标是正整型常量表达式,也可以是含变量的正整型表达式
(特别注意下标越界的问题)
多维数组的初始化
1.把初始值放在一个大括号里
例如,二维数组x[2][3]用下列方法初始化
Int x[2][3]={1,2,3,4,5,6}
于是
x[0][0] =1
x[0][1] =3
x[0][2] =5
x[1][0]=2
x[1][1]=4
x[1][2]=6
对第一维的长度可以不指定,对第二维的长度必须指定
例如
Int a[3][4]
等价于
Int a[ ][4]
将多维数组分解成多个一维数组
将二维数组看成一个特殊的“一维数组“,它的每一个元素又是一个一维数组
例如
Int a[2][3]
可以把它看成是具有两个元素:a[0],a[1]的一维数组,而a[0],a[1]又都是具有3个元素的一维数组,即
a[0] : a[0][0] a[0][1] a[0][2]
a[1] : a[1][0] a[1][1] a[1][2]
因此,对二维数组a[2][3]的初始化又可以分解成多个一维数组的初始化
int a[2][3] = {{1,3,5},{2,4,6}};
应用
求一个3*4矩阵中数值最大的元素,以及它所在的行号和列号
#includeint main()
{
int i,j;
int row=0; //定义行数
int column=0; //定义列数
int max; //定义最大值
int a[3][4];
for (i=0;i<=2;i++)
for (j=0;j<=3;j++)
scanf ("%d",&a[i][j]); //向矩阵中输入数值
max = a[0][0];
for (i=0;i<=2;i++)
for (j=0;j<=3;j++)
if (a[i][j]>max) //遍历数组,选出整个矩阵中最大数
{max = a[i][j];
row = i ;
column = j;
} // 将最大数所在的行和列得出
printf("max=%d\nrow=%d\ncolumn=%d\n",max,row+1,column+1); //输出最大值和所在行和列
return 0 ;
}
二、
js得到多维数组中相同键的值
function jstest(){ var arr=[{'key1':'value1','key2':'value2','key3':'value3'},{'key1':'value4','key2':'value5','key3':'value6'},{'key1':'value7','key2':'value8','key3':'value9'}] ; var obj={}; var narr=new Array(); for(var i=0;i<arr.length;i++){ for(var j in arr[i]){ if(obj[j]!=undefined) obj[j]+=arr[i][j]; else obj[j]=arr[i][j]; } } for(var i in obj){ narr.push(eval("({'"+i+"':'"+obj[i]+"'})")); } //alert(narr[0].key1); alert(narr[1].key2); }
三、如何放回多维数组的元素个数
如下数组:
var persons = [["zhangsan", 25], ["lisi", 21], ["wangwu", 32]];
通过维数(此处是3)乘以每维元素的个数(此处是2)就可以得出该多维数组的元素个数是6了。但是这并不是保险的做法,因为多维数组中每一个维度的元素个数是可以不一样的,如:
var persons = [["zhangsan", 25],["lisi", 21, 172], ["wangwu", 32]];
该数组的第一维的第二个元素数组包含三个元素,其他的只有两个,这再使用length来计算还是3,因为第一维的元素个数没变嘛。但是再使用上面的方法计算该多维数组的元素个数就不对了。
因此多维数组的length属性和一维数组一样,永远返回第一维数组的元素个数。计算多维数组的元素个数,可以自己创建一个或多个嵌套for循环来计算,如:
在知道数组的维度的情况下,可以针对该数组写算法,如二维数组:
var persons = [["zhangsan", 25], ["lisi", 21], ["wangwu", 32]];
function getArr2ElementNum(arr) {
var eleNum = 0;
if (arr == null) {
return 0;
}
for (var i = 0; i < arr.length; i++) {
for (var j = 0; j < arr[i].length; j++) {
eleNum++;
}
}
return eleNum;
}
alert(getArr2ElementNum(persons));
在多维数组维度过多,嵌套复杂时,通过上面的方法来写针对的算法就太累了,特别是当这个复杂的多维数组还可能随时变换维度的情况下。如下这个复杂的多重嵌套的多维数组:
var arrN = [["zhangsan", 25, [1, "wangyuchu", 54, [123, 34, 16]], 43], ["lisi", 21, 172], ["wangwu", 32, "suzhou"]];
甚至,有些多维嵌套数组比这个还复杂,那怎么计算数组元素个数呢,我写了一个求数组元素个数的函数,不管是一维还多维,也不管是多么复杂的嵌套多维数组,都可以计算出来,算法不麻烦,主要用到了递归的理念:
//判断某个对象是不是数组
function isArray(obj) {
return obj && ( typeof obj === 'object') && (obj.constructor == Array);
}
//eleNum变量初始值为0,用来统计数组元素个数
var eleNum = 0;
//递归计算某个数组元素是不是下一维数组,如果是,则继续递归下去;如果不是,统计元素个数。
function recursion(obj) {
if (isArray(obj)) {
for (var j = 0; j < obj.length; j++) {
if (!isArray(obj[j])) {
eleNum++;
continue;
}
recursion(obj[j]);
}
} else {
eleNum++;
}
}
//arr为要计算数组元素个数的一维或多维数组,通过调用递归函数recursion返回数组元素个数
function getArrNElementNum(arr) {
if (arr == null) {
return 0;
}
recursion(arr);
return eleNum;
}
//随意定义一个复杂的多维嵌套数组
var arrN = [["zhangsan", 25, [1, "wangyuchu", 54, [123, 34, 16]], 43], ["lisi", 21, 172], ["wangwu", 32, "suzhou"]];
//打印出来数组元素个数
alert(getArrNElementNum(arrN));
对象:
对象由花括号分隔。在括号内部,对象的属性以名称和值对的形式 (name : value) 来定义。属性由逗号分隔:
var person={firstname:"Bill", lastname:"Gates", id:5566};
上面例子中的对象 (person) 有三个属性:firstname、lastname 以及 id。
空格和折行无关紧要。声明可横跨多行:
var person={
firstname : "Bill",
lastname : "Gates",
id : 5566
};
对象属性有两种寻址方式:
实例
name=person.lastname;
name=person["lastname"];
对象和多维数组的混合使用:
想象这么一个场景,要枚举并统计清华大学(qinghua)、北京大学(beida)、浙江大学(zheda)三所大学一共有多少个系,怎么做?
首先,建立一个数组,数组中包括着三所学校:
var departments = [qinghua, beida, zheda];
每个学校又有很多不同或相同的学院(xx),如何表示?在这里就要用到数组包含对象了:
var departments = [qinghua{xx1, xx2, xx3}, beida{xx4, xx5,
xx6, xx7}, zheda{xx8, xx9}];
每个学院又有不同的系(d),如何表示?
var departments = [qinghua{xx1:[d1, d2], xx2[d3, d5],
xx3:[d7, d8]}, beida{xx4, xx5, xx6, xx7}, zheda{xx8,
xx9}];
//只是举个例子
上述例子就是一个数组,该数组的元素是学校对象,学校对象有N个学院属性,而每个学院属性又是一个包含多个系的数组,这就是一个典型的多维数组和对象混合使用的例子,可以简单明了的说明和列表学校、学院和系之间的级别、归属和数量关系。
- js多维数组的获取与渲染
- js多维数组渲染HTML js for循环渲染页面
- C#获取多维数组的行数与列数
- 数组的数组与多维数组
- js的创建多维数组的方法
- 获取多维数组的行列数(C#)
- 指向数组的指针与多维数组
- js多维对象数组的思考
- c#的js调用后台多维数组
- js遍历不规则的多维数组
- 多维数组与多维指针
- JS 创建多维数组
- js实现多维数组
- C#开发实例大全(基础篇) -93 获取多维数组的行数与列数
- 对多维数组与指针的理解
- 多级指针与多维数组的区别
- 多维数组的动态开辟与释放
- PHP的数组和JS的数组传递 二维 多维
- 接入ShareSDK第三方登录和分享遇到的问题以及解决方法
- android5.1 自动亮度调节简析
- 一次性重建所有聚集索引,方便释放空间
- Docker之几种storage-driver比较
- 《Cracking the Coding Interview程序员面试金典》----基本字符串压缩
- js多维数组的获取与渲染
- java小结
- iOS开发-自动布局篇:史上最牛的自动布局教学!
- neo4j---删除关系和节点
- arch/mips/kernel/head.S 和arch/mips/boot/zcompres/head.S 关系
- 返回到上一个页面并刷新页面
- java 拷贝文件和读取ini文件
- java基础4
- axis2用命令生成客户端代码