javascript - Javascript/Typescript:根据来自其他对象的条件在对象中附加值的最佳方法
问题描述
更新了对象键
let conditionedObject = {
"isNameRequired": true,
"isCityRequired": false,
"isPostRequired": true
};
let myTotalData = {
data: {
"givenName": 'myname',
"street":"mystreet",
"cityName": 'mycity',
"postcode": 'mypost'
}
};
let resultData = {};
condionedObject 和 myTotalData 都来自不同的来源。我想知道基于 condionedObject 创建新对象的最佳方法,例如我的 condionedObject 说我只需要名称和帖子,所以我resultData
应该返回{"givenName":"myname","postcode":"mypost"}
ConditionObject.isNameRequired用于myTotalData.data.givenName,ConditionObject.isPostRequired用于myTotalData.data.postcode, ConditionObject.isCityRequired用于myTotalData.data.cityName,这一切都会说明是否需要将 myTotalData 键放置在新对象中。
提前感谢所有建议和帮助
解决方案
这是我的解决方案:
您需要更改对象中的键conditionedObject
并删除is-
前缀,以便它们与myTotalData
. 这样以后检查就更容易了。
然后就很直接了。
let conditionedObject: {[key: string]: boolean} = {
"isName": true,
"isCity": false,
"isPost": true
};
type DataType = {[key: string]: string};
let myTotalData: DataType = {
"name": 'myname',
"city": 'mycity',
"post": 'mypost'
};
let resultData: DataType = {};
for(const key in conditionedObject) {
// Ensure that the key is really part of this object
if(!conditionedObject.hasOwnProperty(key)) {
continue;
}
if(!conditionedObject[key]) {
continue;
}
const dataKey = key.startsWith("is")
? key.charAt(2).toLowerCase() + key.substring(3)
: key;
if(myTotalData.hasOwnProperty(dataKey)) {
resultData[dataKey] = myTotalData[dataKey];
}
}
console.log(resultData);
输出:
{
name: "myname",
post: "mypost"
}
推荐阅读
- android - 应用程序在 android studio 模拟器上运行但不在真实设备上:(
- python - 通过执行依赖于多个索引的操作来创建列表 - python
- highcharts - 根据不规则数据绘制 Highcharts 热图
- meteor - 如何从命令行调用 Meteor 方法
- spring - Spring OAuth2 在成功验证时重定向到原始 URL
- jquery - 使用 jquery 每 5 秒倒计时
- python - 单从多拆分
- elasticsearch - Elasticsearch 排除对字段值的最高命中
- java - 从数据库 Spring Boot 获取详细信息,异常错误
- swift - 使用 GKStates 和 PhysicsBody 操作的最佳实践