预端功能中的对象类型错误



我目前正在研究雄辩的JS书中的JavaScript和数据架构。我当前的作业是"编写辅助功能预处,该功能获取一个元素和列表,并创建一个新列表,将元素添加到Inoput列表的前部"。我想改进,所以我不一定要为我做我的工作,但是请启发我。我有3个问题,但我的主要问题是第一个:

1:在下面的代码中,我的类型错误在哪里?控制台日志说" TypeError:OldObj是未定义的",但我在功能中将其初始化。

lsPre = function(obj)
{   
    var iter = 0;
    var maxIT = 0; //use to capture final     object iteration
    var oldObj = obj; //initialize old object
    //create new object to prepend to old object
    var newObj = {iteration: iter,
    value: 'Overwrite this Value',
              next: oldObj.next
             };
    while (oldObj.iteration + 1 > maxIT)
    {
        maxIT++;
        newObj.next = oldObj.next;
        oldObj = oldObj.next;
    }
    return newObj;
}

2:是否有比我预期的预端功能更最佳的解决方案(范式)?我正在尝试了解更多面向JS的范例,并且暂时避免了递归解决方案。

3:以下是在与上述相同问题集中的较早问题的链接列表递归解决方案。是否有原因返回对象为:

Object {iteration: 1, value: 2, next: Object}

而不是:

Object {iteration: 1, value: x, next: Object { iteration: 2, value: x, next: (and so on) }}

这是代码:

//Link List
rayREC = function(ray,iter=0)
{   //Default param 'inc' allows arbitrary implementation of this function
    var rLen = ray.length;
    if (iter > rLen) return;
    return  {//recurively increment objects
             iteration: iter,
             value: ray[iter],
             next: rayREC(ray,iter + 1), //recursion
           };
}

我还希望3。

的最佳范式或解决方案

答案1:

您正在获得"TypeError: oldObj is undefined",可能是因为您已经使用undefined参数调用了该功能。

例如:

lsPre(); // "TypeError: oldObj is undefined"
lsPre({iteration: 1, value: 2, next: Object}) // Works... well, kind of...

答案2:

这取决于您正在实现的链接列表的类型。

例如,带有valuenext的非常简单的链接列表:

var simpleListedList = {"value": "Value One", "next": null};

您可以看到这个所谓的"链接列表"是一个节点。

要" prepent",即在前面添加一些东西,我们可以简单地:

var oldNode = simpleListedList;
simpleListedList = {"value": "Value Zero (New)", "next": oldNode};

我们也可以像这样无脑部迭代它:

var currentNode = simpleListedList;
while (currentNode != null){
    console.log(currentNode.value);
    currentNode = currentNode.next;
}

使用"下一步"的链接列表,实际上很难附加(即添加背面):

// First iterate to the last node
var lastNode = simpleListedList;
while (lastNode.next != null) {
    lastNode = lastNode.next;
}
// We then add something at the end
lastNode.next = {"value": "Value N plus One (New last guy)", "next": null}
// Note that simpleListedList is still the first node, unchanged.

答案3:

我不太了解这个问题。

Object {iteration: 1, value: 2, next: Object}

只是一个节点, next值是一个常数对象(不能迭代)

Object {iteration: 1, value: x, next: Object { iteration: 2, value: x, next: (and so on) }}

这似乎是一个适当的链接列表,如果您在JSON中表示它,则应该像这样:

{
    iteration: 1,
    value: "val of 1",
    next: {
        iteration: 2,
        value: "val of 2",
        next: {
            iteration: 3,
            value: "val of 3",
            next: {
                iteration: 4,
                value: "val of 4",
                next: {
                    // ... Not sure how you would terminate the linked list
                }
            }
        }
    }
}

相关内容

  • 没有找到相关文章

最新更新