如何引用自定义数据结构,就好像它是一个数组一样?

时间:2012-10-25 12:51:47

标签: javascript

  

可能重复:
  Javascript custom index accessor

如果我在Javascript中编写一个双向链接列表对象,有没有办法像数组一样引用这个新列表?

例如,如果我想要节点5的值,我想查询

newLinkedList[5]

而不是做我一直在做的事情,这就像

newLinkedList.getNode(5)

基本上,是否有一种方法可以“提升”对自定义数据结构的引用,或者您是否每次都必须将其作为自定义函数执行?

4 个答案:

答案 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]);

http://jsfiddle.net/rbmsJ/1/

答案 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)

从你的问题:

  1. 对象保存在双链表中。
  2. 你知道获取第n个元素的getNode(int n)方法。
  3. 没有办法让你得到数组样式的第n个元素,[n]。因为链表不是数组,链表中的元素是相互链接的,这个数据结构不同于普通数组或JavaScript样式数组:命名属性。

答案 3 :(得分:-1)

数组是没有链接的双链表。要向右移动,只需递增索引,向左移动即可递减索引。

您可以自己编写一组函数来执行基本列表操作,并且仍然可以使用简单的索引来访问任何aribtrary元素。