数据结构与算法@数组

概述

数组是计算机编程世界里最常见的数据结构。任何编程语言都包含,为内建类型,效率很高。本篇主要梳理 JavaScript 中数组的相关知识点。整体结构如下,具体细节见参考书籍,常见使用场景见详述部分。
思维导图

详述

数组在 JavaScript 中只是一种特殊的对象,所以一个数组中的元素可以是各种类型,不必像其他语言要求是同一种类型。

sort 中使用比较函数

sort()方法是按照字典顺序对元素进行排序的,因此它假定元素都是字符串类型。实际场景中通常需要排序数字类型、对象类型等,这样就需要传入一个比较函数来实现我们的目标。

数字类型排序

1
2
3
4
5
6
7
8
9
var numbers = [10, 3, 22, 6, 4];
numbers.sort();
// [10, 22, 3, 4, 6]

function compare(num1, num2) {
return num1 - num2;
}
numbers.sort(compare);
// [3, 4, 6, 10, 22]

对象类型排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
var students = [
{
name: "baidu",
age: 12
},
{
name: "ali",
age: 22
},
{
name: "tengxun",
age: 8
}
];

function compareFunc(propName) {
return function(obj1, obj2) {
var value1 = obj1[propName];
var value2 = obj2[propName];
if (value1 < value2) {
return -1;
} else if (value1 > value2) {
return 1;
} else {
return 0;
}
};
}
// 按age排序
students.sort(compareFunc("age"));
// 按name排序
students.sort(compareFunc("name"));

创建二维数组通用方法

1
2
3
4
5
6
7
8
9
10
11
Array.matrix = function(numRows, numCols, initial) {
var arr = [];
for (var i = 0; i < numRows; i++) {
var columns = [];
for (var j = 0; j < numCols; j++) {
columns[j] = initial;
}
arr[i] = columns;
}
return arr;
};

练习

更多练习及实现答案请参考下一篇数据结构——数组(练习题及实现)

参考

《数据结构与算法 JavaScript 描述》
《学习 JavaScript 数据结构与算法(第 2 版)》