gpt4 book ai didi

javascript - 从 typescript 对象中查找具有填充值的属性名称

转载 作者:行者123 更新时间:2023-12-01 00:48:21 26 4
gpt4 key购买 nike

我有属性名称数组 (removableWriteOffFields),我需要检查 JSON 对象中的这些属性是否已填充值。之后,我需要将填充属性列表写入filledFields变量。我尝试将对象转换为值及其属性名称的数组,但该对象是结构化的,因此我无法轻松地将其转换为我将检查的数组。

我尝试过这个解决方案

    let filledFields: string[] = [];
const removFields: string[] = this.individualPartyConfiguration
.removableWriteOffFields;
const partyArr = helper.filter(function(abc) {
return isString(abc[1]);
});
removFields.forEach(element => {
const index = partyArr.findIndex(e => e[0] === element);
if (
partyArr[index][1] !== (undefined && null) &&
partyArr[index][1].length !== 0
) {
filledFields.push(element);
}
});

removableWriteOffFields 包含我需要检查的所有属性名称。

        "removableWriteOffFields": [
"flowerSelfAssessment",
"phoneNumber",
"gender",
"birthDate",
"age",
"jobTitle",
"jobFamily",
"city",
"region",
"country",
"parentOrganizationName"
]

对象示例:

{
"_id": "6224da36-9a28-4bed-a316-f910d1c1df90",
"metadata": {
"trackingInfo": {
"initiator": "EntityFactory",
"created": "2019-07-16T08:13:30.044Z",
"creator": "EntityFactory",
"modified": "2019-07-16T08:13:30.044Z",
"version": 0
},
"type": "IndividualParty",
"valid": true
},
"externalPartyId": "P010",
"locations": [
{
"_id": "986b7bbe-6138-4897-8b70-22d89126fc03",
"metadata": {
"trackingInfo": {
"initiator": "EntityFactory",
"created": "2019-07-16T08:13:30.044Z",
"creator": "EntityFactory",
"modified": "2019-07-16T08:13:30.044Z",
"version": 0
},
"type": "EmailAddressLocation",
"valid": true
},
"valid": true,
"primary": true,
"emailAddress": "jan.Kina@luth.com"
}
],
"partyProfiles": [
{
"_id": "877b183a-0610-42d8-9899-3722639d2f89",
"metadata": {
"trackingInfo": {
"initiator": "EntityFactory",
"created": "2019-07-16T08:13:30.044Z",
"creator": "EntityFactory",
"modified": "2019-07-16T08:13:30.044Z",
"version": 0
},
"type": "LutherProUserPartyProfile",
"valid": true
},
"agile": false,
"agileShare": 0,
"parentOrganizationName": "Apo Czech, a.s.",
"background": {
"defaultLink": "https://s3-eu-wea.com/Luideo_1.mp4.png",
"videoLink": "httpseo_1.mp4"
},
"contractStart": "2019-07-16T08:13:30.044Z",
"avatarLink": "",
"nickname": "Jan.Kina",
"jobTitle": "Backend developer",
"preferredLang": "en-US",
"defaultPartyRoleId": "2e71ee52-0f24-88ee-5ec7-8b9f5c1df6a3"
}
],
"partyRoleIds": [
"510d02d1-41a9-c139-f8aa-59c363eb0b2c"
],
"birthDate": "2019-01-15T00:00:00.000Z",
"firstName": "Jan",
"formattedName": "Jan Kina",
"formattedPhoneticName": "Jan Kina",
"gender": "male",
"headline": "headline",
"lastName": "Kina",
"middleNames": [],
"phoneticFirstName": "Jan",
"phoneticLastName": "Kina",
"summary": "Summary of this user..."
}

解决方案

function pick<T>(party: T, removFields: string[], val: string[]) {
let key: keyof T;

Object.keys(party).forEach(item => {
key = item as (keyof T);
if (removFields.includes(key as string)) {
val.push(key as string);
logger.info(`val: ${JSON.stringify(val, undefined, 2)}`);
} else if (typeof party[key] === 'object') {
pick<T[keyof T]>(party[key], removFields, val);
}
});

return val;
}

最佳答案

这是一个使用递归的更简单的解决方案。

const pick = (obj, arr, def={}) => {
let val = def;
Object.keys(obj).forEach((item, curr) => {
if(arr.includes(item)) {
val[item] = obj[item];
} else if(typeof obj[item] === 'object') {
pick(obj[item], arr, val)
}
});
return val
}

let arr = [
"flowerSelfAssessment",
"phoneNumber",
"gender",
"birthDate",
"age",
"jobTitle",
"jobFamily",
"city",
"region",
"country",
"parentOrganizationName"
]

let obj = {
"_id": "6224da36-9a28-4bed-a316-f910d1c1df90",
"metadata": {
"trackingInfo": {
"initiator": "EntityFactory",
"created": "2019-07-16T08:13:30.044Z",
"creator": "EntityFactory",
"modified": "2019-07-16T08:13:30.044Z",
"version": 0
},
"type": "IndividualParty",
"valid": true
},
"externalPartyId": "P010",
"locations": [
{
"_id": "986b7bbe-6138-4897-8b70-22d89126fc03",
"metadata": {
"trackingInfo": {
"initiator": "EntityFactory",
"created": "2019-07-16T08:13:30.044Z",
"creator": "EntityFactory",
"modified": "2019-07-16T08:13:30.044Z",
"version": 0
},
"type": "EmailAddressLocation",
"valid": true
},
"valid": true,
"primary": true,
"emailAddress": "jan.Kina@luth.com"
}
],
"partyProfiles": [
{
"_id": "877b183a-0610-42d8-9899-3722639d2f89",
"metadata": {
"trackingInfo": {
"initiator": "EntityFactory",
"created": "2019-07-16T08:13:30.044Z",
"creator": "EntityFactory",
"modified": "2019-07-16T08:13:30.044Z",
"version": 0,
},
"type": "LutherProUserPartyProfile",
"valid": true
},
"agile": false,
"agileShare": 0,
"parentOrganizationName": "Apo Czech, a.s.",
"background": {
"defaultLink": "https://s3-eu-wea.com/Luideo_1.mp4.png",
"videoLink": "httpseo_1.mp4"
},
"contractStart": "2019-07-16T08:13:30.044Z",
"avatarLink": "",
"nickname": "Jan.Kina",
"jobTitle": "Backend developer",
"preferredLang": "en-US",
"defaultPartyRoleId": "2e71ee52-0f24-88ee-5ec7-8b9f5c1df6a3"
}
],
"partyRoleIds": [
"510d02d1-41a9-c139-f8aa-59c363eb0b2c"
],
"birthDate": "2019-01-15T00:00:00.000Z",
"firstName": "Jan",
"formattedName": "Jan Kina",
"formattedPhoneticName": "Jan Kina",
"gender": "male",
"headline": "headline",
"lastName": "Kina",
"middleNames": [],
"phoneticFirstName": "Jan",
"phoneticLastName": "Kina",
"summary": "Summary of this user...",
}

const pick = (obj, arr, def={}) => {
let val = def;
Object.keys(obj).forEach((item, curr) => {
if(arr.includes(item)) {
val[item] = obj[item];
} else if(typeof obj[item] === 'object') {
pick(obj[item], arr, val)
}
});
return val
}

console.log(pick(obj, arr))

typescript 版本(我删除了:let key: keyof IndividualParty;并更改了let key = item as (keyof IndividualParty));并且对我来说工作正常,函数返回带有属性的数组

function pick(party: IndividualParty,removFields: (keyof IndividualParty)[], def?: string[]) {
let val: string[];
if (def !== undefined) {
val = def;
} else {
val = [];
}
Object.keys(party).forEach(item => {
let key = item as (keyof IndividualParty);
if (removFields.includes(key)) {
val.push(key);
} else if (typeof party[key] === 'object') {
pick(party[key], removFields, val);
}
});
return val;
}
pick(obj, arr)

关于javascript - 从 typescript 对象中查找具有填充值的属性名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57198269/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com