【Day5】不是八卦阵的有序集合:阵列

阵列算是一种「特殊物件」,可以在里面放入0到多个元素,里面的元素可以是字串、数字等原始型别资料、也可以是另一个阵列或另一个物件。与物件的差别在於,阵列是有顺序的集合,每个元素都有其索引值,并且可以用length的属性来取得阵列的长度。

如何建立阵列?

普遍的做法是采用「阵列实字」(Array Literal)的方式:

//建立一个华山论剑(huaShan)的阵列
var huaShan = ['东邪','西毒','北丐','南帝','中神通'];
console.log(huaShan.length); 
//5 huaShan这个阵列有5个元素,所以长度为5

console.log(huaShan[0]);
//'东邪' 阵列的索引值从0开始算,所以第一个元素的索引值为0。

console.log(huaShan[1]);
//'西毒' 阵列的索引值从0开始算,所以第二个元素的索引值为1。

这样也可以建立阵列:

//建立一个华山论剑(huaShan)的「空」阵列
var huaShan = [];
huaShan[0] = '东邪';
huaShan[1] = '西毒';
huaShan[2] = '北丐';
huaShan[3] = '南帝';
huaShan[4] = '中神通';

console.log(huaShan);
// [object Array] (5)  ["东邪","西毒","北丐","南帝","中神通"]
console.log(huaShan.length);
// 5

还有一种方式是透过new关键字来建立物件:

//建立一个江南七怪(sevenMonster)的阵列
var sevenMonster = new Array();
sevenMonster[0] = '柯镇恶';
sevenMonster[1] = '朱聪';
sevenMonster[2] = '韩宝驹';
sevenMonster[3] = '南希仁';
sevenMonster[4] = '张阿生';
sevenMonster[5] = '全金发';
sevenMonster[6] = '韩小莹';

console.log(sevenMonster.length);
// 7 

阵列并不需要连续指定,没被指定的其索引值为 undefined。

就像江南七怪在大漠时,五哥「笑弥陀」张阿生被「铜屍」陈玄风杀死,只剩六怪,但是排序是不变的,不会六弟变五哥,七妹变六妹,五哥空出来的位置就变成'undefined'。

//建立一个江南七怪(sevenMonster)的阵列,但是五哥「笑弥陀」张阿生被「铜屍」陈玄风杀死,只剩六怪
var sevenMonster = new Array();
sevenMonster[0] = '柯镇恶';
sevenMonster[1] = '朱聪';
sevenMonster[2] = '韩宝驹';
sevenMonster[3] = '南希仁';
//但是五哥「笑弥陀」张阿生被「铜屍」陈玄风杀死,sevenMonster[4],不予指定。
sevenMonster[5] = '全金发';
sevenMonster[6] = '韩小莹';

console.log(sevenMonster.length);
// 7 
console.log(sevenMonster);
//['柯镇恶','朱聪','韩宝驹','南希仁','undefined','全金发','韩小莹'];
//sevenMonster第五个元素,也就是sevenMonster[4]的元素变成'undefined'

我们可以利用 .length 的属性来取得阵列的长度,或利用它来改变阵列的长度。

如果length设得比原本的阵列长度还要长,多出来的元素将以'undefined'填补。如果length设的比原本阵列长度少,则多出来的元素将被删除,即使之後length设回原来长度,被删掉的元素也不会恢复,而会以'undefined'取代。

//建立一个江南七怪(sevenMonster)的阵列
var sevenMonster = ['柯镇恶','朱聪','韩宝驹','南希仁','张阿生','全金发','韩小莹'];
console.log(sevenMonster.length);  // 7

//江南七怪後来被陈玄风及杨康分别杀害,只剩柯镇恶一人。
sevenMonster.length = 1;

console.log(sevenMonster);  // ['柯镇恶'];

//人死不能复生,即使再把江南七怪(sevenMonster)的length设为7,後面的六位大侠也都是'undefined'
sevenMonster.length = 7;
console.log(sevenMonster);
//['柯镇恶','undefined','undefined','undefined','undefined','undefined','undefined']

阵列可以使用的方法列举如下:

  • pop():取出阵列尾端元素。
  • push():新增元素至阵列的尾端。
  • shift():取出阵列的第一个元素
  • unshift():新增元素至阵列开端。
//建立一个华山(huaShan)的阵列
var huaShan = ['东邪','西毒','北丐','南帝','中神通'];
huaShan.pop();
console.log(huaShan);
//['东邪','西毒','北丐','南帝'] huaShan.pop()取出了阵列的最後一个元素
huaShan.push('中顽童');
console.log(huaShan);
//['东邪','西毒','北丐','南帝','中顽童'];
huaShan.shift();
console.log(huaShan);
//['西毒','北丐','南帝','中顽童']

huaShan.unshift('东方不败');
//['东方不败','西毒','北丐','南帝','中顽童'];
//东方不败跑错棚了

学会阵列与物件之後,我们就可以开始用JavaScript来处理一些网页上撷取来的资料,就像学内功要先学打坐练习呼吸一样。


<<:  Day 5 - 透过 RKE 架设第一套 Rancher(下)

>>:  【Day5】从频域到 wave 的转换,浅谈虚数可以拿来 Train Model 吗?

【Day8】 用 MelGan 把 Mel 转成 Waveform

MelGan 诚如昨天所说的,使用 Wavenet_Vocoder 生成声音的速度实在是太慢了,所以...

DAY 8 『 CollectionView 』Part1

CollectionView:Storyboard、Xib + Collection View + ...

Day 13 : 程序除错与异常

相信大家学到这边一定有碰过各式大大小小的程序错误,遇到程序出错很紧张怎麽办TAT。这里会衍生到时候我...

新新新手阅读 Angular 文件 - ngStyle - Day16

本文内容 本篇内容为阅读官方文件 ngStyle 的笔记内容。 ngStyle 使用时机 昨天 Da...

Day.4 针对使用者做管理 - 权限管理&资安 (Power)

在资料库管理上,root 相当於拥有所有权限的最大管理者,针对不同使用者规划给予相应的权限是很重要的...