首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Javascript:在JSON中搜索路径

Javascript:在JSON中搜索路径
EN

Stack Overflow用户
提问于 2018-12-05 01:43:18
回答 1查看 0关注 0票数 0

给定像这样的json结构:

代码语言:javascript
复制
{
  name: "A",
  childNodes: [{
    name: "B",
    childProps: {
      prop_list: [{
        name: "BS1"
      }, {
        name: "BS2"
      }]
    },
    childNodes: [{
      name: "C",
      childProps: {
        prop_list: [{
          name: "CS1"
        }, {
          name: "CS2"
        }]
      },

    }]


  }],
  childProps: [{
    prop_list: [{
      name: "AS1"
    }, {
      name: "AS2"
    }]
  }]
}

我想确定树中是否存在路径。谁能告诉我什么才是最佳解决方案?我应该在路径中为每个名称迭代树吗?例如:

代码语言:javascript
复制
A, AS1 -> Exists
A, B, BS1 -> Exists
A, B, C, CS1 -> Exists
A, C, CS1 -> Does not exist

我的方法是:获取第一个字符串的对象,查找该对象中的第二个字符串,找到包含第二个字符串的子对象,然后使用它来搜索第三个字符串,依此类推......但我实施起来真的非常困难。如果有人能帮助到我,那就太好了!

我有一个可以返回一个找到字符串的对象的函数。

代码语言:javascript
复制
function findObj(obj, str) {
    let res;
    if (obj.name && obj.name === str) {
        return obj;
    } else {

        if (obj.childNodes) {
            for (let n in obj.childNodes) {
                res = findObj(obj.childNodes[n], str);
                if (res) {
                    return res;
                }
            }
        }

        if (obj.childProps) {
            if (obj.childProps.prop_list) {
                for (let n in obj.childProps.prop_list) {
                    res = findObj(obj.childProps.prop_list[n], str);
                    if (res) {
                        return res;
                    }
                }

            }
        }
        return null;
    }
}

我需要递归地为给定数组中的每个字符串应用此函数。例如:如果输入数组是[A,B,C],我需要执行以下命令:

代码语言:javascript
复制
findObj((findObj(findObj(obj, "A"), "B"), "C")

如果路径中的一个字符串丢失,该函数将返回null,否则它应该返回数组中最后一个字符串的对象。这需要对所有给定的数组执行。关于如何实现这一点大家有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2018-12-05 11:00:15

那这个呢?

代码语言:javascript
复制
function exists(data, path){
  var currentNode = data;
  return path.split('.').every(function(nextPath){
        currentNode = currentNode[nextPath];
      return currentNode != undefined;
  })    
}

用法示例:

代码语言:javascript
复制
var a = { b: [{c: 'some value'}]};
exists(a, 'b.0.c');
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100006218

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档