javaScript数据结构之数组
文/三和小钢炮
01 数组
数组是最简单的数据结构,几乎所有的语言都支持数组。
02 创建和初始化数组
var weeks = new Array();
var weeks = new Array(7); // 长度声明
var weeks = new Array('Sunday', 'Monday', 'Tuesday');
var weeks = []; // 推荐
var weeks = ['Sunday', 'Monday', 'Tuesday']; // 推荐
我们只推荐后面两种,在可阅读性上是最好的。
声明一个斐波那契数列
var fibonacci = [];
fibonacci[0] = 1;
fibonacci[1] = 1;
for(var i = 2; i < 20; i++) {
fibonacci[i] = fibonacci[i-1] + fibonacci[i-2];
}
03 添加和删除元素
写个push操作
Array.prototype.myPush = function() {
for(var i = 0; i < arguments.length; i++) {
this[this.length] = arguments[i];
}
};
var nums = [0, 1, 2, 3];
nums.myPush(5); // 添加操作
nums.myPush(6, 7); // 添加多个元素
再写个unshift操作
Array.prototype.myUnshift = function() {
for(var i = 0; i < arguments.length; i++) {
for (var j = this.length; j >= 0; j--) {
this[j] = this[j-1];
}
this[0] = arguments[i];
}
}
arr.myUnshift(0);
arr.myUnshift(2, 3);
再写个shift操作
Array.prototype.myShift= function() {
var first = this[0];
for(var i = 0; i < this.length; i++) {
this[i] = this[i+1];
}
this.length -= 1;
return first;
}
arr.myShift();
console.log(arr);
再写个pop操作
Array.prototype.myPop= function() {
var last = this[this.length - 1];
this.length -= 1;
return last;
};
04 多维数组
javaScript只提供了一维数组,我们可以用嵌套数组模拟。
如下面操作:
var list = [];
list[0] = [1,2,3,4];
list[1] = [1,2,3,4];
还可以下面的做法:
var list = new Array(10);
for(var i = 0; i < list.length; i++) {
list[i] = new Array(10);
}
05 数组的方法参考
无论js封装了多少方法,最终都是基础操作。
方法名 | 描述 |
---|---|
concat | 连接多个数组,返回结果 |
reverse | 颠倒数组 |
slice | 传入索引,将数组里对应索引范围内的元素作为新数组返回 |
indexOf | 返回第一个给定参数的索引,没有返回-1 |
lastIndexOf | 返回给定参数索引的最大值 |
filter | 运算数组的每一项,返回符合条件组成的数组 |
forEach | 运算数组的每一项 |
map | 运算数组的每一项,返回结果 |
some | 运算数组的每一项,如果任一项返回true,则返回true |
every | 运算数组的每一项,每一项并返回true,则返回true |
sort | 按指定规则排序 |
toString | 转换为字符串 |
join | 连接成字符串 |
例如:
写一个map方法
Array.prototype.myMap= function(fn) {
for(var i = 0; i < this.length; i++) {
this[i] = fn.apply(this, [this[i], i, this]);
}
}