我正在尝试考虑一个函数,该函数接受表示树中节点的字符串十进制整数的平面数组,每个句点表示该树中的层次结构。我正在尝试创建 prevNode
和 nextNode
函数。采用三个参数 ids, id, planeLock
。如果节点没有prev
或next
id
则返回false
。如果 planeLock
为 true
,则不会转到树中的下一个节点(例如从 1
到 0.1
)它将转到该平面中的下一个节点(例如,从 1
到 0
)否则就知道它是兄弟节点,而不是兄弟节点最深的 child 。
var ids = [
'0',
'0.1',
'1',
'2',
'2.0',
'2.1',
]
prevNode(ids, '0')
->false
//没有上一个节点prevNode(ids, '1', true)
->0
//pass true 保持在同一平面上prevNode(ids, '1')
->0.1
//树中的上一个节点prevNode(ids, '2.0', true)
->false
prevNode(ids, '2.0')
->2
//上升一个节点
如何解析这些字符串以获得所需的结果?
最佳答案
一种可能的方法:
function getLevel(id) {
return id.split('.').length;
}
function siblingNode(ids, id, planeLock, goesBack) {
var index = ids.indexOf(id);
var level = getLevel(id);
while (goesBack ? --index >= 0 : ++index < ids.length) {
var currEl = ids[index];
var currLevel = getLevel(currEl);
if (!planeLock || currLevel === level) {
return currEl;
}
if (currLevel < level) {
break;
}
}
return false;
}
function prevNode(ids, id, planeLock) {
return siblingNode(ids, id, planeLock, true);
}
function nextNode(ids, id, planeLock) {
return siblingNode(ids, id, planeLock, false);
}
Demo .显然,在内存所有级别(快速但需要内存)和不内存(反之亦然)之间存在权衡。如果源数组是动态的,并且您必须在插入新项时寻找位置,我强烈建议使用内存方法(因为您必须在每次插入时检查 level
)。
关于javascript - 遍历字符串中的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32772520/