数组

简介: 数组

几乎所有的编程语言都支持数组类型,因为数组是最简单的内存数据结构。

创建数组

let arr = new Array()
let arr2 = new Arrya(2)
let arr3 = new Arrya(1, 2, 4)
let arr4 = []
let arr5 = [1, 2, 4]

求斐波那契数列前20个数字

let fibonacci = []
fibonacci[1] = 1
fibonacci[2] = 2
for (let i = 3; i < 20; i++) {
  fibonacci[i] = fibonacci[i - 1] + fibonacci[i - 2]
}
console.log(fibonacci)

添加元素

Array.push()

let numbers = [0, 1, 2]
numbers.push(3, 4)

插入元素到数组首位

Array.unshift()

numbers.unshift(-2)

删除数组

删除数组最后的一个元素

Array.pop()

删除数组第一个元素

Array.shift()

指定位置添加或删除元素

Array.splice()

删除从数组索引1开始的2个元素

numbers.splice(1, 2)

从索引2的位置添加3个元素,分别为 1, 3, 4

numbers.splice(2, 3, 1, 3, 4)

二维和多维数组

let a = [1, 2, 3]
let b = [9, 7, 6]

可以使用矩阵(二维数组)来存储这些信息

let arr = []
arr[0] = [1, 2, 3]
arr[1] = [9, 7, 6]
console.log(arr)

JavaScript 只支持一维数组,并不支持矩阵。使用数组套数组,实现矩阵或任一多维数组。

let arr = []
arr[0] = []
arr[0][0] = 1
arr[0][1] = 2
arr[0][2] = 3
arr[1] = []
arr[1][0] = 9
arr[1][1] = 7

迭代二维数组的元素

输出矩阵的通用函数

function printMatrix(myMatrix) {
  for (let i = 0; i < myMatrix.length; i++) {
    for (let j = 0; j < myMatrix[i].length; j++) {
      console.log(myMatrix[i][j])
    }
  }
}
printMatrix(myMatrix)
printMatrix(myMatrix)


多维数组

创建一个 3 * 3 * 3 的矩阵,每一个格里包含矩阵的i(行)、j(列)及z(深度)之和:

let mytrix3x3x3 = []
for (let i = 0; i < 3; i++) {
  matrix3x3x3[i] = []
  for (let j = 0; j < 3; j++) {
    matrix3x3x3[i][j] = []
    for (let z = 0; z < 3; z++) {
      matrix3x3x3[i][j][z] = i + j + z
    }
  }
}

输出 3 x 3 x 3 矩阵

for (let i = 0; i < mytrix3x3x3.length; i++) {
  for (let j = 0; j < mytrix3x3x3[i].length; j++) {
    for (let z = 0; z < mytrix3x3x3[i][j].length; z++) {
      console.log(mytrix3x3x3[i][j][z])
    }
  }
}


如果是一个 3 x 3 x 3 x 3 的矩阵,代码中用四层嵌套的 for 语句,以此类推

JavaScript 的数组方法参考

数组合并

Array.concat()

迭代器函数

Array.every()Array.some()Array.forEach()Array.map()Array.filter()Array.reduce()

ES6 ES7 新增的数组方法

@@iteratorcopyWithinentriesincludesfindfindIndexfillfromkeysofvalues

类型数组

与C和Java等其他语言不同,JavaScript 数组不是强类型的,因此它可以存储任意类型的数据。 而类型数组则用于存储单一类型的数据。它的语法是 let myArray = new TypedArray(length),其中 TypedArray 需替换为下表所列之一。

类型数组 数据类型
Int8Array 8位二进制补码整数
Uint8Array 8位无符号整数
Uint8ClampedArray 8位无符号整数
Int16Array 16位二进制补码整数
Uint16Array 16位无符号整数
Int32Array 32位二进制补码整数
Uint32Array 32位无符号整数
Float32Array 32位IEEE浮点数
Float64Array 64位IEEE浮点数

代码示例如下:

let length = 5
let int16 = new Int16Array(length)
let array16 = []
array16.length = length
for (let i = 0; i < lenght; i++) {
  int16[i] = i + 1
}
console.log(int16)


使用 WebGL API 、进行位操作、处理文件和图像时,类型数组都可以大展拳脚。它用起来和普通数组也毫无二致,所有的数组方法和功能都可以用于类型数组。

类型数组处理二进制数据教程: goo.gl/kZBsGX

相关文章
|
2天前
|
存储 算法 C++
c++数组详细介绍(二)
c++数组详细介绍(二)
75 0
|
2天前
1-9 数组
1-9 数组
10 0
|
2天前
|
存储 C++ 索引
c++数组
c++数组
18 1
|
2天前
|
存储 程序员 C++
|
2天前
|
程序员 索引
C 中数组详解
C 中数组详解。
14 3
|
2天前
|
存储 程序员 C++
c++数组详细介绍(一)
前言 深入理解C++的数组和字符串是成为熟练C++程序员的重要一步。本文将探索C++中数组和字符串的基本概念,从基础到进阶,包括数组的声明、初始化、访问和多维数组的操作,以及字符串类的使用和与字符数组的转换。还将涉及异常处理、动态内存分配、STL中的其他容器、常用字符串操作。
60 0
|
9月前
|
存储 机器学习/深度学习 Java
原来这就是数组
原来这就是数组
53 0
|
5月前
|
存储 编译器 程序员
数组详解
数组详解
45 0
|
6月前
|
机器学习/深度学习 Java
【数组的使用】
【数组的使用】
33 0