本文介绍如何使用 JavaScript 原型链模拟 C# 中 List 类的核心功能。通过封装 Array 对象,实现了添加、移除、获取元素、清空列表及子列表截取等常用操作。代码展示了 add、addAll、get、remove、clear、size 和 subList 等方法的实现细节,适用于需要类似 C# List 行为的前端场景。
JavaScript 模拟 C# List 动态数组实现
具体实现代码如下所示:
/*
* List 为大小可变的数组结构
* version: 1.0
*/
function List() {
this.list = new Array();
};
/**
* 将指定元素追加到列表末尾。
* @param object 要添加的元素
*/
List.prototype.add = function(object) {
this.list[this.list.length] = object;
};
/**
* 将另一个列表的所有元素追加到当前列表末尾。
* @param listObject 另一个 List 实例
*/
List.prototype.addAll = function(listObject) {
this.list = this.list.concat(listObject.list);
};
/**
* 获取指定索引位置的元素。
* @param index 目标索引
* @return 该位置上的元素
*/
List.prototype.get = function(index) {
return this.list[index];
};
/**
* 移除指定索引位置的元素。
* @param index 目标索引
* @return 被移除的元素
*/
List.prototype.removeIndex = function(index) {
var object = this.list[index];
this.list.splice(index, 1);
return object;
};
/**
* 移除列表中第一个匹配的元素。
* @param object 目标元素
* @return 被移除的元素,若未找到则返回 null
*/
List.prototype.remove = function(object) {
var i = 0;
for(; i < this.list.length; i++) {
if( this.list[i] === object) {
break;
}
}
if(i >= this.list.length) {
return null;
} else {
return this.removeIndex(i);
}
};
/**
* 清空列表中的所有元素。
*/
List.prototype.clear = function() {
this.list.splice(0, this.list.length);
};
/**
* 返回列表中元素的总数量。
* @return 元素个数
*/
List.prototype.size = function() {
return this.list.length;
};
/**
* 截取从 start(包含)到 end(不包含)之间的元素,返回新的 List。
* @param start 起始索引
* @param end 结束索引
* @return 包含截取元素的新 List 实例
*/
List.prototype.subList = function(start, end) {
var list = new List();
list.list = this.list.slice(start, end);
return list;
};
/**
* 判断列表是否为空。
* @return 若列表无元素返回 true,否则返回 false
*/
List.prototype.isEmpty = function() {
return this.list.length == 0;
};