我目前正在尝试编写一个检查对象属性的函数,如果该属性有一个键'数据',则将该值应用于其父元素,除非当前元素已经在对象根。所以,给定对象:
{
data: {
user: {
data: {
firstName: 'joe',
data: {surname: 'bloggs'}
}
},
message: 'this is a message'
}
}
它应该返回:
{
data: {
user: {
firstName: 'joe',
surname: 'bloggs'
},
message: 'this is a message'
}
}
到目前为止,我的逻辑看起来像这样:
function stripData(data, parent) {
'use strict';
return Object.assign({}, ...Object.keys(data).map(key => {
if(key !== 'data' && typeof data[key] === 'object' && !parent){
return ({[key]: exports.stripData(data[key], key)});
}
if(key === 'data' && parent){
Logger.verbose(`key is data and parent is set`);
if(typeof data[key] === 'object'){
return ({[parent]: exports.stripData(data[key], parent)});;
}
return ({[parent]: data[key]});
}
if(key === 'data'&&!parent ){
return ({[key]: exports.stripData(data[key], key)});
}
return ({[key]: data[key]})
}));
}
此函数到目前为止只返回传递的对象。日志语句告诉我它到达第一个对象的message
键,但到那时它还没有递归遍历对象树。
可能有一种更简单的方法可以做到这一点,如果可能的话,我希望保持无依赖关系,尽管如果有人能指出我用lodash这样做的直接方式,我会使用它。
答案 0 :(得分:0)
这个似乎给出了结果,你需要:
onCreate()