我目前正在研究雄辩的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:
这取决于您正在实现的链接列表的类型。
例如,带有value
和next
的非常简单的链接列表:
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
}
}
}
}
}