Typescript 递归地更改对象的所有键
我想根据字典更改对象的所有键,例如:Typescript 递归地更改对象的所有键,typescript,object,recursion,Typescript,Object,Recursion,我想根据字典更改对象的所有键,例如: const result: Object = { "_id": "010973", "local": { "prod": { "unit": 1, "vol": 1174.5, }, "pack": {
const result: Object = {
"_id": "010973",
"local": {
"prod": {
"unit": 1,
"vol": 1174.5,
}, "pack": {
"vol": 16226,
}
}, "catalogue": {
"thumb": "http://www.apimages.com/Images/Ap_Creative_Stock_Header.jpg",
}
};
const dict: Object = {
'_id': 'Product number',
'local.prod' : 'Product information',
'local.prod.vol': 'Product vol (cm3)',
'local.prod.unit': 'Product unit (qty)',
'local.pack.vol': 'Package vol (cm3)',
'catalogue.thumb': 'Image URL'
};
我希望最终结果是这样的
{
"Product number": "010973",
"local": {
"Product information": {
"Product unit (qty)": 1,
"Product vol (cm3)": 1174.5,
}, "pack": {
"Package vol (cm3)": 16226,
}
}, "catalogue": {
"Image URL": "http://www.apimages.com/Images/Ap_Creative_Stock_Header.jpg",
}
};
现在我有
const changeKeys = (obj: Object, dictionary: Object): void => {
Object.keys(obj).forEach(key => {
obj[dictionary[key]] = obj[key]
})
};
changeKeys(result, dict);
这只会更改第一层,因此_id将成为产品编号。我想我只需要对结果对象进行某种递归,但我似乎无法使其工作,并且在密钥无法转换时进行一些错误处理。我可以建议您使用lodash,而无需重新发明轮子。它有很多对现代应用有用的功能
import * as _ from "lodash";
for(const key of Object.keys(dict)){
if(_.get(result, key) != undefined){
_.set(result, key, dict[key]);
}
}
console.log(result);