json文件中的无限嵌套元素-如何获得特定的元素
Infinite nested elements in a json file - How to get specific element?
这是我的json文件
{
"categories": {
"category": [
{
"id": "1",
"title": "Android",
"subcategory": [
{
"id": "1",
"title": "JavaScript",
"question": [
我的问题是:如果子类别元素可以出现无限次嵌套在自己我怎么能得到每个子类别的所有元素在我的json文件显示与javascript的帮助?我怎样才能在巢里玩呢?如果我在写代码:
data.categories.category[i].subcategory[0].subcategory[0].subcategory[0].title
意味着我需要将subcategory[0]
相加无限次才能得到每一个Title属性-创建许多不同的函数来处理每个不同的情况-这是我的问题。
迭代它们:
function getAllTitles(node) {
var cats = data.categories.category,
titles = [];
for (var i=0; i<cats.length; i++) {
var cat = cats[i];
while (cat.subcategory && cat.subcategory[0])
cat = cat.subcategory[0]; // travel deeper
// now cat is a subcategory that has no subcategories any more
titles.push(cat.title);
}
return titles;
}
使用递归函数。比如:
function getLeafCategory(node) {
if (node.subcategory && node.subcategory[0]) {
return getLeafCategory(node.subcategory[0]);
}
return node;
}
显然,如果你的JSON真的是无限的,这将不起作用!但在这种情况下,您将无法首先加载它!
你可以这样称呼它:
var myTitle = getLeafCategory(data.categories.category[i]).title;
函数将检查传入的内容并查看它是否有子类别以及该子类别是否有第0个条目。如果是,它将新节点再次传递给函数。如果不是,那么你已经到达链的末端,它返回你的结果。
关于递归的几个注意事项:如果你的链真的很长,你可能最终得到一个Stack Overflow
。应该可以将递归函数重写为while
循环,但代码(IMHO)有点不那么优雅。
function getLeafCategoryWithoutRecursion(node) {
while(node.subcategory && node.subcategory[0]) {
node = node.subcategory[0]
}
return node;
}
还要注意,这两个函数都假设您没有任何循环(其中子类别实际上指向父类),这将导致这两个函数在无限循环中挂起(尽管递归函数最终会抛出Stack Overflow
)。
相关文章:
- 我可以获得相对于被点击元素的确切点击位置吗
- 检查元素是如何获得焦点的
- 使用JavaScript,如何获得具有特定className的元素's通过使用getElementByClass
- 使用Razor和javascript来获得下拉列表元素
- RSpec和Capybara:如何获得元素的水平和垂直位置
- 量角器-如何从中继器而不是元素中获得实际值
- 如何在遍历表和添加新元素时获得tr的索引
- 是否可以在悬停画布元素时获得工具提示
- 通过合并具有相同字段值的元素,获得卑鄙数组的唯一元素
- 如何在ember js中插入元素后获得通知
- 如何在Javascript中从3个元素中获得一个元素
- 如何在JS中使用forEach迭代元素时获得元素的名称
- json文件中的无限嵌套元素-如何获得特定的元素
- 在302重定向或嵌入/对象/iframe标签中的元素后获得flash src(跨域)
- 如何从多个元素中获得特定跨度的文本
- 使用jQuery隐藏多个元素并获得一个回调
- 试图找到以前的DOM元素并获得输入值jquery
- jQuery.hooper()输入一个元素,但如何在另一个元素上获得leave触发器
- 使元素无法获得焦点
- 是否有一种方法可以从元素中获得SlickGrid的实例?