首页 > 解决方案 > 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.givenNameConditionObject.isPostRequired用于myTotalData.data.postcodeConditionObject.isCityRequired用于myTotalData.data.cityName,这一切都会说明是否需要将 myTotalData 键放置在新对象中。

提前感谢所有建议和帮助

标签: javascripttypescript

解决方案


这是我的解决方案:

您需要更改对象中的键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"
}

推荐阅读