假设我有一个像这样的深度对象
cont obj = {
a0: {
b0: {
c0: 0,
c1: 1
},
b1: {
c2: 2
}
}
}
我希望在一个方法中使用这种接口来检索它的子树,让我们将其命名为'retrieveDeep‘:
const subObj = retrieveDeep(
obj,
{
a0: {
b0: {
c0: null
},
b1: {
c2: null
}
}
}
)
// should return
// {
// a0: {
// b0: {
// c0: 0
// },
// b1: {
// c2: 2
// }
// }
// }
我知道实际上我可以从头开始实现它,不会有太多困难,但是如果已经有了一个lodash (或者它看起来有点像graphQL api形状!)函数,我很高兴知道它tx。
发布于 2016-07-09 22:44:42
只需迭代模式的属性并对对象进行递归调用。分配原始值。
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);
发布于 2019-02-20 18:07:52
Lodash get方法:_.get(object, path, [defaultValue])
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
https://stackoverflow.com/questions/38282856
复制相似问题