gpt4 book ai didi

javascript - 创建类似于数组的对象或扩展 Array 原型(prototype)

转载 作者:行者123 更新时间:2023-11-30 06:41:51 26 4
gpt4 key购买 nike

我正在尝试制作类似于数组的东西。

我需要能够“释放”一个索引(将其值设置为未定义)但我不想丢失该索引。每当将新项目放入数组时,都应重新使用“已发布”索引。

我希望能够做类似的事情:

example = new MyArray();

a = example.leaseIndex(); // returns 0
example[a] = "example value";

b = example.leaseIndex(); // returns 1
example[b] = "another value";

example.releaseIndex(0);

c = example.leaseIndex(); // returns 0
example[c] = "yet another value";

在我的示例中,leaseIndex 找到可用索引,或者如果没有可用索引,则将新项目推送到数组并返回该项目的索引。

我想这样做是为了让数组不会随着时间的推移不必要地变大。我无法删除“已发布”项目,因为数组中的每个项目都包含对同一数组中另一个项目的引用。

我在主数组之外的函数和数组上取得了一些小的成功,以跟踪可用索引并分配和释放它们,但理想情况下我希望该功能成为主数组的一部分。

我必须将我的函数添加到数组(或其原型(prototype))中还是有其他方法?因为并非我的所有阵列都需要此功能。

希望这是有道理的:/

更新

我正在尝试存储布线布局,它本质上是一个网络图(点和关于这些点如何连接的信息)。

图为织机示例。它有 3 个连接器;红色 (0) 有 2 条线,黄色 (1) 有 3 条线,绿色 (2) 有 2 条线。红色连接器上的其中一条线是拼接的(允许多条线连接到一条线,蓝色方 block )

enter image description here

这就是那台织机的存放方式。

loom = {
points = [
{ self: 0, list: [ 2 ] },
{ self: 1, list: [ 7 ] },
{ self: 2, list: [ 0 ] },
{ self: 3, list: [ 7 ] },
{ self: 4, list: [ 6 ] },
{ self: 5, list: [ 7 ] },
{ self: 6, list: [ 4 ] },
{ self: 7, owner: 1, list: [ 1, 3, 5 ] }
],
connectors = [
[ 0, 1 ],
[ 2, 3, 4 ],
[ 5, 6 ]
]
}

连接器数组中的元素包含点数组中点的索引。每个点对象内的列表数组包含其目的地的索引,这些目的地也是点。

我正在尝试创建函数来帮助更轻松地管理索引,只是想知道是否有扩展数组的方法,或者创建包含该功能的类似内容。使用静态函数就可以了,这也是我一直在使用的。我只是想看看我是否可以扩展数组,或者使用类似的东西,所以我不需要使用静态函数。

最佳答案

我会将方法添加到数组的原型(prototype)中,如下所示:

Array.prototype.leaseIndex = function () {
for (var i = 0; i < this.length; i++) {
if(typeof this[i] === "undefined") {
return i;
}
}
return this.length;
};
Array.prototype.releaseIndex = function (index) {
delete this[index];
};

因此,您的代码将如下所示:

example = [];

a = example.leaseIndex(); // returns 0
example[a] = "example value";

b = example.leaseIndex(); // returns 1
example[b] = "another value";

example.releaseIndex(0);

c = example.leaseIndex(); // returns 0
example[c] = "yet another value";

希望对你有帮助。

关于javascript - 创建类似于数组的对象或扩展 Array 原型(prototype),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10606071/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com