javascript - 遍历字符串中的数字

标签 javascript arrays sorting traversal

我正在尝试考虑一个函数,该函数接受表示树中节点的字符串十进制整数的平面数组,每个句点表示该树中的层次结构。我正在尝试创建 prevNodenextNode 函数。采用三个参数 ids, id, planeLock。如果节点没有prevnext id 则返回false。如果 planeLocktrue,则不会转到树中的下一个节点(例如从 10.1)它将转到该平面中的下一个节点(例如,从 10)否则就知道它是兄弟节点,而不是兄弟节点最深的 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/

相关文章:

javascript - 将对象添加到数组中,然后显示在表格中

java - JSONArray 空内容 Java 和 Android

arrays - 用于返回电子邮件数组的 Ruby 类方法

javascript - 将 html 文本从数据库加载到 CKEDITOR 以进行更新

javascript - Facebook 的功能是什么 __d

c - C语言中分数升序排列

linux - 在 Linux 中排序

scala - 为什么 spark 排序比 scala 原始排序方法慢

javascript - 通过 javascript 将值传递给 php

对象内部的 Java 数组