Javascript 将父值替换为其子值
我有一个这样的物体Javascript 将父值替换为其子值,javascript,Javascript,我有一个这样的物体 { data: { name: { en: 'val1', es: 'val2' }, altName: { en: 'val3', es: 'val4' } }, otherField: { en: 'val5', es: 'val6' } } 我需要一个函数,我向其中传递一个键en,在输出时得到一个对象,例如 { data: { name: 'va
{
data: {
name: {
en: 'val1',
es: 'val2'
},
altName: {
en: 'val3',
es: 'val4'
}
},
otherField: {
en: 'val5',
es: 'val6'
}
}
我需要一个函数,我向其中传递一个键en
,在输出时得到一个对象,例如
{
data: {
name: 'val1',
altName: 'val3'
},
otherField: 'val5'
}
我怎样才能做到这一点呢?我想这可能会有所帮助
const数据={
数据:{
姓名:{
恩:“val1”,
es:‘val2’,
},
altName:{
恩:“val3”,
es:‘val4’,
},
},
其他字段:{
恩:“val5”,
es:‘val6’,
},
};
常量replaceParent=(x,r)=>{
Object.key(x).forEach((key)=>{
如果(x[键][r]){
x[键]=x[键][r];
}else if(x[键]=“对象”的类型){
替换父项(x[键],r);
}
});
};
替换父项(数据“en”);
控制台日志(数据)代码>对于您的简单示例,这确实有效。这段代码显然不干净,但为了得到这个想法,我认为它确实很好地证明了这一点
function doCrazyStuff(objToScan, key) {
if(objToScan instanceof Object && typeof key === "string") {
let props = {};
for(prop in objToScan) {
if(typeof objToScan[prop] === "object") {
props[prop] = doCrazyStuff(objToScan[prop], key);
} else {
if(prop === key) {
return objToScan[prop];
}
}
}
return props;
} else {
return null;
}
}
let yourObj = {
data: {
name: {
en: 'val1',
es: 'val2'
},
altName: {
en: 'val3',
es: 'val4'
}
},
otherField: {
en: 'val5',
es: 'val6'
}
};
console.log(doCrazyStuff(yourObj, "en"));
我在这里做的是递归。首先,我看一下您是否为该方法提供了正确的参数,在本例中是一个js obj和一个表示我们要查找的属性名称的字符串。然后我们准备一个obj,我们可以返回并循环“objToScan”值中的所有属性。如果一个prop也是一个js obj,那么我们将这个prop的值设置为一个递归调用的结果,该递归调用包含找到的obj和我们要查找的键。否则,我们检查在obj中找到的道具是否是我们的键,然后返回它的值。否则我们什么也不做
如果您需要进一步的帮助,请给出一个答案,我会看看我能为您做些什么。您可以通过对象字段进行递归迭代,例如使用,并检查每个字段类型/键。