所以我有一个JSON文件,该文件被解析为Javascript中的对象。我知道你在想什么:幸运的家伙。JSON本质上是一棵大树形式的流程图。这只是我要实现的目标的一个小示例:
tree = {
"options": [
{
"options": [
{
"name": "target",
},
],
},
{
"options": [
{
"link": "...?",
},
],
},
]
}
因此,在此示例中,我将深入研究第二个分支(在其中显示"link"
),并且希望能够跳转到包含的分支"name": "target"
。记住这是JSON,因此它必须是一个字符串(除非有本地链接?!在那儿?),但我不知道如何最好地格式化它。
如我所见,我至少有两个选择。
我可以搜索。如果name
是唯一的,我可以缩放树以查找元素,直到找到它。我以前从未使用过Javascript,但我希望它会很慢。
我可以使用像options:1:options:1
这样的导航路径来描述路径的每个键。再说一次,我从未做过,但是,假设没有错误,它将更快。您将如何实施?
我还有其他选择吗?最好的是什么?JSON解码时,有没有办法解开这个包?或者这是无限循环的秘诀?
什么link: 'tree.options[0].options[0]'
然后eval(path.to.link)
?
以下样品仅使用Chrome进行测试。所有同一个树:
var tree = { level1: [{ key: 'value' }] };
eval
function resolve(root, link) {
return (new Function('root', 'return root.' + link + ';'))(root);
}
var value = resolve(tree, path.to.link);
window
function resolve(root, link) {
return (new Function(
'root', 'return root.' + (link || root) + ';'
))(link ? root : window);
}
resolve(tree, 'level1[0].key'); // "value"
resolve('tree.level1[0].key'); // "value"
try / catch块可防止断开的链接引发错误。
function resolve(root, path) {
try {
return (new Function('root', 'return root.' + path + ';'))(root);
} catch (e) {}
}
resolve(tree, 'level1[0].key'); // "value"
resolve(tree, 'level1[1].key'); // undefined
这里的好处是我们可以将对象或数组作为传递root
。还要注意,我们可以用path.split('/')
我们选择的任何字符替换斜杠。
function resolve(root, path) {
path = '["' + path.split('/').join('"]["') + '"]';
return (new Function('root', 'return root' + path + ';'))(root);
}
resolve(tree.level1, '0/key'); // "value"
resolve(tree, 'level1/0/key'); // "value"
resolve(tree, 'level1/0'); // Object {key: "value"}
问题内容: 如果您还希望获得结果总数(在进行分页之前),那么在SQL Server 2000、2005、2008、2012中对结果进行分页的最佳方法(从性能角度而言)是什么? 问题答案: 获取结果总数和分页是两个不同的操作。为了这个示例,我们假设您要处理的查询是 在这种情况下,您可以使用以下方法确定结果总数: …这看似效率低下,但假设所有索引等均已正确设置,实际上却表现不错。 接下来,要以分页的方
问题内容: 给定一个自引用表 与相关值的相关表 还有一些样本数据 我需要一个存储程序来接送直属孩子,并为他们,他们的孩子和他们的孩子一路走来。 例如,如果传入,则树将是直接子代,输出将是 应该采用哪种方法来实现此行为? 我正在考虑使用CTE,但想知道是否有更好/更快的方法。 问题答案: 假设您的层次结构不算太深,这样的递归CTE将可以工作: 非CTE方法将需要某种形式的迭代,基于游标或其他方式。由
问题内容: 我有一个带有递归parent_id的自引用MySQL表: 在测试期间,我想清空它,但TRUNCATE失败: 我目前必须手动删除所有记录,从树的底部开始向上操作。即使是小树,这也很繁重。 有没有解决此问题的简单方法?我无法在表中轻松地重新创建该表,因为其他表已对其进行引用(我已经将其截断了,所以那里应该没有数据完整性问题)。 问题答案: 为什么不: ?
问题内容: 我必须建立一棵树,其中将包含约300个节点。该树没有深度限制。因此它可以具有3或15个级别。每个节点可以有无限数量的子代。 优先考虑的是尽可能快地获得完整的树/子树,但有时我也需要添加节点或移动节点,但并不是那么频繁。 我想知道在数据库中存储树的最佳方法以及在php中检索数据(如果可能)的最佳方法。 问题答案: 您可以使用 嵌套集模型, 因为它可以产生非常有效的查询。检出在MySQL中
问题内容: 我正在创建一个通用的Web服务,该服务可能有许多不同的客户端,但有些客户端目前无法预料。 我已经有了一个不错的Java Services API,并希望在此之上提供一个Web服务外观。 SOAP与REST辩论的双方都有很多争论,这让我想知道是否有一种简单的方法可以同时提供两者?不一定要在同一时间将两者都用于同一部署(尽管可能不错)……而是向客户提供选择。 问题答案: 不,没有。SOAP
问题内容: Java是我选择的编程语言之一。尽管将应用程序分发给最终用户,但我总是遇到问题。 为用户提供JAR并不总是像我想要的那样友好,并且使用Java WebStart要求我维护Web服务器。 分发Java应用程序的最佳方法是什么?如果Java应用程序需要在用户计算机上安装工件,该怎么办?有没有好的Java安装/打包系统? 问题答案: 有多种解决方案,取决于你的发行要求。 只是用一个jar。这