如果我在Javascript中编写一个双向链接列表对象,有没有办法像数组一样引用这个新列表?
例如,如果我想要节点5的值,我想查询
newLinkedList[5]
而不是做我一直在做的事情,这就像
newLinkedList.getNode(5)
基本上,是否有一种方法可以“提升”对自定义数据结构的引用,或者您是否每次都必须将其作为自定义函数执行?
答案 0 :(得分:3)
Javascript中的数组实际上只是对数字属性进行特殊处理的对象。你可以自己完成同样的事情,但是目前Javascript没有提供一个简单的机制来透明地双向访问这些索引;你必须使用命名方法处理添加和删除对象,但你仍然可以通过类似数组的索引来阅读它们。
以下是一个简单的自定义“Arrayish”对象的示例:
var ll_array = {};
ll_array.length = 0;
ll_array.addNode = function (newNode) {
this[this.length] = newNode;
this.length++;
};
ll_array.addNode('Foo');
ll_array.addNode('Bar');
console.log('Length: ' + ll_array.length);
console.log(ll_array);
console.log(ll_array[0]);
答案 1 :(得分:0)
遍历列表的强力方法,然后将遍历中的每个项目分配给数组元素,这是首先想到的事情:
假装你有一个LinkedList对象。我们还假设有一些迭代列表的方法叫做Head和Next。现在,请注意,这是完全未经测试的,您可以通过以下方式创建原型toArray()方法:
LinkedList.prototype.toArray() = function () { var array={};
var currentItem = list.head;
while (currentItem!=null){
array.addNode(currentItem);
currentItem=currentItem.Next;
}
return array;
}
显然这必须允许其他假定的函数,但想法是遍历链表,并对数组中的每个元素进行引用,然后返回它。希望在某种程度上有所帮助。
答案 2 :(得分:0)
从你的问题:
没有办法让你得到数组样式的第n个元素,[n]。因为链表不是数组,链表中的元素是相互链接的,这个数据结构不同于普通数组或JavaScript样式数组:命名属性。
答案 3 :(得分:-1)
数组是没有链接的双链表。要向右移动,只需递增索引,向左移动即可递减索引。
您可以自己编写一组函数来执行基本列表操作,并且仍然可以使用简单的索引来访问任何aribtrary元素。