【问题标题】:Hierarchical List sorting in the best way to make navigation faster分层列表排序以最佳方式使导航更快
【发布时间】:2016-08-19 11:48:18
【问题描述】:

我从一个 Web 服务调用中得到一个大数组,我需要通过它填充一个下拉列表。

[{"Level1":"A1","Level2":"A11","Level3:"A111"},
{"Level1":"A1","Level2":"A12","Level3:""},
{"Level1":"A2","Level2":"A21","Level3:"A212"},
{"Level1":"A2","Level2":"A22","Level3:""},
{"Level1":"A3","Level2":"","Level3:""},
{"Level1":"A4","Level2":"A41","Level3:"A412","Level4:"A4123"}]

我的数组是这种格式。 我需要创建应该有一个后退按钮的列表,除非以防万一。 此外,关卡的数量是动态的,这意味着它也可以有 5、6、7 级...。

列表选项应该是-

A1,A2,A3,A4

如果用户点击A2,显示的选项应该是-

A21,A22

现在如果用户点击 A21,它应该会显示 -

A212

但是如果他们点击A22

它应该选择该值,因为A22 没有任何进一步的值。 此外,如果用户在有选项 A212 时选择返回,它应该显示 A21A22

使用这个数组获得快速结果的最佳方法是什么,因为我将在其中获得数千个元素。

【问题讨论】:

  • 您的网络服务返回无效的 JSON。
  • 请添加一个想要的结果 - 大概是数据结构。

标签: javascript angularjs arrays json logic


【解决方案1】:

看看Trie数据结构。

在 JavaScript 中你可以这样组织它:

var root = { "A1": { "A11": .., "A12": .. }, "A2": { "A21": .., "A22": .. }, .. };

因此,您从root 对象中获取密钥并显示它们。如果用户点击 A1,你会得到一个值 root["A1"] 等等。

使用简单的插入方法构建它(希望我没看错,请检查):

function insert(node, elem, level) {
   var key = "Level" + level;
   var value = elem[key];
   if (!value) {
      return;
   }
   var childNode = node[value];
   if (!childNode) {
     childNode = {};
     node[value] = childNode;
   }
   insert(childNode, elem, level + 1);
}

首先声明root = {}insert(root, elem, 1),其中elem 是数组中的一个元素。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-25
    • 1970-01-01
    • 2014-03-08
    • 1970-01-01
    • 1970-01-01
    • 2019-10-31
    • 2011-09-14
    相关资源
    最近更新 更多