入门魔法 - 阵列

前情提要

经过上一回的测验,我发现了自己不是天选之人。

「哪尼,为什麽我不是天选之人,我不是有魔力吗?而且还有引导学姊你呀!」

艾草:「哎唷,现在为了扩大培养魔法人才只好放宽魔力基准呀。在没人才我要被派去当猫头鹰信使耶...我明明是绿绣眼,呜呜呜呜呜」

(两人相看无言)

艾草:「咦,先不要哭丧着脸,天选之人很多都消失在去魔王城的路上了↑_(ΦwΦ;)Ψ。而且阵列跟魔法阵息息相关唷!」

「怕爆,那不用天选了,继续乖乖累积魔力总量罗~~~₍₍ ◝(●˙꒳˙●)◜ ₎₎」
https://ithelp.ithome.com.tw/upload/images/20210922/20139066IWRVu2VEMl.png


阵列

今天让我们聊聊阵列吧,阵列是一种有顺序的资料集合,外层使用 [] 中括号包覆里面的值,而值可以放原始型别、物件型别等各种型别的值,阵列是使用 , 逗号隔开,接下来就让我们来练习宣告一个变数并赋予值为阵列吧!

let array = ['item0','item1'];

阵列的读取

为什麽是从零开始写起呢?因为阵列是从零开始读取的,如下:

let array = ['item0','item1'];
console.log(array[0])//'item0'

而要读取阵列的长度,可以使用 length 的方式:

let array = ['item0','item1'];
console.log(array.length)//2

阵列的型别

另外阵列是物件型别,所以当我们去查看它的型别时,会出现以下状况:

let array = [];
console.log(typeof array)//object

那如果要查看阵列的型别可以怎麽做呢?

let array = [];
Array.isArray(array)//true

可以使用 Array.isArray() 的方式,将要判断的内容放入()小括号内,如果是阵列的话,就会回传 true

阵列的修改

阵列的修改方式为使用 [] 中括号读取值後,直接赋予新的值即可,如下:

let array = [0];
array[0] = 1;
console.log(array)//[1]

阵列的新增

这边会介绍三种新增的方式,包含预设新增的方式、unshift()push() 的方式!

预设写入的方式可以直接用 [] 去指定位置,并赋予该阵列值,如下:

let array = [0];
array[1] = 1;

这样就完成罗,是不是很简单呀?

如果我们今天想指定到其他位置也可以,如下:

let array = [0];
array[2] = 2;
console.log(array)//[0, empty, 2]
console.log(array[1])//undefined
console.log(array.length)//3

如上面的范例,如果指定到第2笔资料,但第1笔尚未存放值的情况下,会被带入 undefined ,且不会影响阵列长度,所以让我们开心的随便乱放吧(误,单纯玩笑话,请不要乱来

接下来来介绍第二个方法 unshift() 吧!

unshift() 会将资料塞入在阵列的第一个值,如下:

let array = [1];
array.unshift(0);
console.log(array)//[0, 1]

最後阵列的新增方式让我们来学习 push() 吧!

push() 会将资料塞入在阵列的最後一个值,如下:

let array = [1];
array.push(0);
console.log(array)//[1, 0]

知识点:阵列的新增

  • 可以使用指定位置的方式写入
  • unshift() 写入的资料会塞在第一笔
  • push() 写入的资料会塞在最後一笔

阵列的删除

这篇会简单介绍三种阵列的删除方式:pop()shift()splice(,)

让我们先来学习 pop() 吧!

pop() 会删除该阵列的最後一笔资料,如下:

let array = [0,1,2];
array.pop();
console.log(array)//[0, 1]

shift() 会删除该阵列的第一笔资料,如下:

let array = [0,1,2];
array.shift();
console.log(array)//[1, 2]

splice(,) 比较特别,它可以带入三个参数,分别代表:

第一个参数: start 起始位置

第二个参数:deleteCount 要删除几笔资料(选择性)

第三个参数:item1, item2, ... 要加入阵列的元素(选择性)

splice(start,deleteCount) 可以让我们指定想删除的位置,所以当我们今天想删除中间的1时可以使用以下方法:

let array = [0,1,2];
array.splice(1,1);
console.log(array)//[0, 2]

splice(start,deleteCount,item) 可以让我们指定想删除的位置,并在删除的位置内新增一个值:

let array = [0,1,2];
array.splice(0,1,3);
console.log(array)//[3, 1, 2]

指定在第零笔删除一笔资料,并在该处插入数字 3 。

知识点:阵列的删除

  • pop() 会删除阵列的最後一笔资料
  • shift() 会删除阵列的第一笔资料
  • splice(,) 可以指定删除位置,分别要带入三个参数:
    • 第一个代表:起始位置
    • 第二个代表:要删除几笔资料
    • 第三个代表:要新增的值

总结

阵列

  • 外层要使用中括号包覆
  • 每个值间是使用 , 逗号分隔
  • 阵列值从零开始读取
  • 可以使用 length 来读取长度
  • 阵列的型别为 object
  • 可以使用 Array.isArray() 来判断是否为阵列
  • 阵列的新增可以使用 : 预设新增的方式、unshift()push()
  • 阵列的删除可以使用:pop()shift()splice()

小练习

请问以下选项何者错误?

let herbs = ["mugwort","mint","vanilla"];
console.log(herbs[1]);//选项一
herbs.pop();
herbs.push("orris");
herbs.splice(0,1);

A 选项一会读取出 "mint"
B 阵列中仅存的值为 ["mint", "orris"]
C herbs.pop() 会删除阵列中的最後一笔资料
D herbs.push("orris") 会在阵列的最前方塞入一笔资料
E splice(0,1) 第一个参数零代表起始位置,第二个参数代表往後删除一笔

解答:透过阵列方法 push 可以新增资料,资料会被塞入最後一笔,所以答案是 D 。

参考文献

JavaScript 必修篇 - 前端修练全攻略(六角学院)
https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Global_Objects/Array/splice


<<:  Day 7: LeetCode 485. Max Consecutive Ones

>>:  追求JS小姊姊系列 Day7 -- 郑列展现的工具力(中)

[Day1] - 开赛!

The lone wolf dies but the pack survives. ---- Ga...

Day20 - 用 Ruby on Rails 抓台湾证券交易所资料-每日收盘行情

前言 这篇开始会有几篇是与「台湾证券交易所」有关,示范如何用 Ruby on Rails 来爬虫将资...

Day 27 Filebeat with multiple module and ELK Dashboard

Day 27 Filebeat with multiple module and ELK Dashb...

好想中乐透啊,Ruby 30 天刷题修行篇第十四话

嗨我是A Fei,连续好几天都十一点多回家,真的是累翻,先来看看今天的题目: Time to win...

Consistency and Consensus (4-1) - Atomic Commit and Two-Phase Commit(2pC)

分散式 transaction 和共识 (Distributed Transactions and ...