首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >javascript / lodash :如何在对象中进行递归深度获取,这要归功于一个子树对象

javascript / lodash :如何在对象中进行递归深度获取,这要归功于一个子树对象
EN

Stack Overflow用户
提问于 2016-07-09 22:30:23
回答 2查看 2.8K关注 0票数 1

假设我有一个像这样的深度对象

代码语言:javascript
运行
复制
cont obj = { 
   a0: { 
     b0: { 
       c0: 0, 
       c1: 1 
      }, 
      b1: { 
       c2: 2
      } 
     }
 }

我希望在一个方法中使用这种接口来检索它的子树,让我们将其命名为'retrieveDeep‘:

代码语言:javascript
运行
复制
const subObj = retrieveDeep(
 obj,
 {
  a0: {
    b0: {
      c0: null
    },
    b1: {
      c2: null
    }
  }
 } 
)
// should return 
// { 
//   a0: { 
//     b0: { 
//       c0: 0
//      }, 
//      b1: { 
//       c2: 2
//      } 
//     }
// } 

我知道实际上我可以从头开始实现它,不会有太多困难,但是如果已经有了一个lodash (或者它看起来有点像graphQL api形状!)函数,我很高兴知道它tx。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-09 22:44:42

只需迭代模式的属性并对对象进行递归调用。分配原始值。

代码语言:javascript
运行
复制
function retrieveDeep(object, pattern) {
    function iter(o, p, r) {
        Object.keys(p).forEach(function (k) {
            if (k in o) {
                if (typeof o[k] === 'object' && o[k] !== null) {
                    r[k] = {};
                    iter(o[k], p[k], r[k]);
                    return;
                }
                r[k] = o[k];
            }
        });
    }
    
    var result = {};
    iter(object, pattern, result);
    return result;
}

var obj = { a0: { b0: { c0: 0, c1: 1 }, b1: { c2: 2 } } },
    subObj = retrieveDeep(obj, { a0: { b0: { c0: null }, b1: { c2: null } } });

console.log(subObj);

票数 1
EN

Stack Overflow用户

发布于 2019-02-20 18:07:52

Lodash get方法:_.get(object, path, [defaultValue])

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

https://stackoverflow.com/questions/38282856

复制
相关文章

相似问题

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