当前位置: 首页 > 面试题库 >

获取Javascript中深层对象的所有键

严锐
2023-03-14
问题内容

我有以下对象:

var abc = {
    1: "Raggruppamento a 1",
    2: "Raggruppamento a 2",
    3: "Raggruppamento a 3",
    4: "Raggruppamento a 4",
    count: '3',
    counter: {
        count: '3',
    },
    5: {
        test: "Raggruppamento a 1",

        tester: {
            name: "Georgi"
        }
    }
};

我想检索以下结果:

  • abc [1]
  • abc [2]
  • abc [3]
  • abc [4]
  • abc.count
  • abc.counter.count
  • abc [5]
  • abc [5] .test
  • abc [5] .tester
  • abc [5] .tester.name

可以在插件的帮助下使用nodejs吗?


问题答案:

您可以通过递归遍历对象来做到这一点:

function getDeepKeys(obj) {
    var keys = [];
    for(var key in obj) {
        keys.push(key);
        if(typeof obj[key] === "object") {
            var subkeys = getDeepKeys(obj[key]);
            keys = keys.concat(subkeys.map(function(subkey) {
                return key + "." + subkey;
            }));
        }
    }
    return keys;
}

getDeepKeys(abc)在问题中的对象上运行将返回以下数组:

["1", "2", "3", "4", "5", "5.test", "5.tester", "5.tester.name", "count", "counter", "counter.count"]


 类似资料:
  • 我想从数据数组中获得所有名称。有没有什么方法可以不用迭代器来做呢?

  • 问题内容: 我需要一个从任何参数构建JSON有效字符串的函数,但: 通过不两次添加对象来避免递归问题 通过截断给定深度来避免调用堆栈大小问题 通常,它应该能够处理大对象,但要以截断为代价。 作为参考,此代码失败: 避免递归问题很简单: 但是到目前为止,除了复制和更改Douglas Crockford的代码 以跟踪深度之外,我还没有找到任何方法来避免在诸如或any之类的非常深的对象上发生堆栈溢出。有

  • 如上图所示,我想同时获取到person对象,要怎么做呢? 在线调试

  • 让我们想象一下Elasticsearch索引,其中每个文档代表一个国家。Country具有城市字段,该字段定义为嵌套的。 示例映射(为了本示例的简洁性而简化): 我插入到索引中的文档如下所示: 是否可以组成一个返回所有城市(所有国家)并支持排序的查询 第一个返回页面(回复)将包含捷克共和国的10个城市,第二个页面将包含10个城市,其中四个(最后一个)来自捷克共和国,六个来自斯洛伐克。 我正在研究复

  • 问题内容: 如果有一个Javascript对象: 假设它有50多个属性,却不知道属性名称(即不知道“键”)如何在循环中获取每个属性值? 问题答案: 通过使用一个简单的循环:

  • 问题内容: 我陷入困境,我有一个这样的对象。 我不会遍历所有这些,所以我有这样的事情。 •东西 • 你好,世界 •您好溢出 •约翰·杜 •惊人的标题 • 谷歌一下 •我还是个孩子 •另一个 •他是我的兄弟 •她是我妈妈 •你永远不知道我是否要生孩子 问题是我不知道这个物体会走多深或里面有什么。因此我将无法手动进行。我在底部提供的小提琴中完成了一个基本的循环,但是我不知道如何自动循环这些循环并创建嵌