数组 Array
数组即一组数,是指在一段连续的内存中存储相同类型元素(保证元素长度系统一致)的一种集合。
数组长度是固定的,每个元素有对应一个索引,并且这个索引同数组所占内存的一样是连续的。
在不同的编程语言中,对数组的实现不尽相同。在JS中,数组的长度是非固定的, 类型也非固定,并且能存放任意类型, 这意味着在JS程序中, 你可以看到以下的代码:
js
const arr = [1, '张三', [1], function fn() {}]
实际上,js中的数组大部分情况下在内存中都是非连续的,因此大多情况下用普通数组达不到很高的性能。这体现在遍历数组时寻址的性能差距,且数组中的每个number元素至少都要占 4字节, 因为js中只有number类型(该类型是32位的)。
大多数情况下,你都不需要为你数组的类型困扰。唯一需要注意的是尽可能的保持元素类型的一致(方便js引擎进行优化)。
类型数组 TypedArray
js也有对数组的正统实现:TypedArray。
js
const arr1 = new Uint8Array()
const arr2 = new Uint16Array()
这个类型在操作二进制数据(文件)时有很大的作用
使用场景
数组的传统使用场景就是操作底层数据,但在前端中除了编码和文件操作,几乎用不到。因此以下提到的大多是前端的应用场景。
- 作为普通的数组使用
- 作为栈使用
- 作为队列使用
- 作为列表使用
JS中 数组的方法
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
<template>
<div class="box">
<div>origin: {{ origin }}</div>
<div>arr: {{ arr }}</div>
<VRunCode
title="切割"
:code="code1"
:ctx="{
arr
}"
/>
<VRunCode
title="拼接"
:code="code2"
:ctx="{
arr
}"
/>
</div>
</template>
<script lang="ts" setup>
import { shallowReactive } from 'vue'
const origin = [1, 2, 3, 4, 5, 6, 7, 8, 9]
const arr = shallowReactive([...origin])
const code1 = `
return arr.slice(2, 3)
`
const code2 = `
const result = arr.splice(1, 3)
console.log(arr)
return result
`
</script>
<style scoped>
.box > div {
margin-bottom: 10px;
}
</style>