Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将父值替换为其子值_Javascript - Fatal编程技术网

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中找到的道具是否是我们的键,然后返回它的值。否则我们什么也不做


如果您需要进一步的帮助,请给出一个答案,我会看看我能为您做些什么。

您可以通过对象字段进行递归迭代,例如使用,并检查每个字段类型/键。