मेरे पास एक वस्तु है, जिसके अंदर मेरे पास एक कुंजी है जिसमें निम्नलिखित संरचना वाली वस्तुओं की सरणी है।
{"userId":"ab123","tenantMapList":[{"tenantId":"Essentials","igniteRoleIds":"Quality Analyst,Test Lead"},{"tenantId":"Essentials","igniteRoleIds":"Quality Analyst,Test Lead"},{"tenantId":"Essentials","igniteRoleIds":"Quality Analyst,Test Lead"}]}
यहां, igniteRoleIds
कुंजी के अंदर, मैं अल्पविराम से अलग किए गए तारों को अल्पविराम से अलग किए गए नंबरों से बदलना चाहता हूं। जैसे Quality Analyst
के रूप में 1
, Test Lead
के रूप में 2
आदि।
मैंने निम्नलिखित समाधान की कोशिश की है, लेकिन यह मेरे लिए काम नहीं किया।
Object.keys(payload).map((item) => {
console.log("item", item);
if(item === "tenantMapList") {
tenantMapList.map(function(item2) {
if(item2.igniteRoleIds === "Quality Analyst")
item2.igniteRoleIds = 1;
if(item2.igniteRoleIds === "Test Lead")
item2.igniteRoleIds = 2;
})
}
})
जहां पेलोड वह वस्तु है जिसे मैंने ऊपर चिपकाया है।
मैं स्पष्ट कर दूं कि मेरा प्रारंभिक json वही है जो मैंने ऊपर चिपकाया था, लेकिन igniteRoleIds कुंजी को संशोधित करने के बाद, आउटपुट नीचे वाले जैसा दिखना चाहिए।
अपेक्षित आउटपुट इस तरह होना चाहिए:
{
"userId": "ab123",
"tenantMapList": [
{
"tenantId": "Essentials",
"igniteRoleIds":[
1,2
]
},
{
"tenantId": "Essentials",
"igniteRoleIds":[
1,2
]
},
{
"tenantId": "Essentials",
"igniteRoleIds":[
1,2
]
}
]
}
2 जवाब
आप रोल आईडी के लिए रोल नामों की मैपिंग बना सकते हैं, और उन्हें बदलने वाले प्रत्येक आइटम को पुन: सक्रिय कर सकते हैं:
const input = {
"userId": "ab123",
"tenantMapList": [{ // was it intentional that this was an array in an array?
"tenantId": "Essentials",
"igniteRoleIds": "Quality Analyst,Test Lead"
}, {
"tenantId": "Essentials",
"igniteRoleIds": "Quality Analyst,Test Lead"
}, {
"tenantId": "Essentials",
"igniteRoleIds": "Quality Analyst,Test Lead"
}]
}
const ROLES = {
"Quality Analyst": 1,
"Test Lead": 2
}
input.tenantMapList.forEach(item => {
item.igniteRoleIds = (
item.igniteRoleIds
.split(',') // split on commas
.map(s => ROLES[s] || s) // look up the corresponding number
);
})
console.log(input);
सबसे पहले, आपका igniteRoleIds कुंजी है जिसका मान एक स्ट्रिंग है। तो, आप सीधे इसकी तुलना नहीं कर सकते। स्ट्रिंग को मानों की एक सरणी में विभाजित करने के लिए स्प्लिट (',') का उपयोग करें। एक और मुद्दा यह है कि आप एक चर में अपना नक्शा मान निर्दिष्ट नहीं कर रहे हैं। यहाँ काम कर रहे उदाहरण है
var data = {
"userId": "ab123",
"tenantMapList": [
[{
"tenantId": "Essentials",
"igniteRoleIds": "Quality Analyst,Test Lead"
}, {
"tenantId": "Essentials",
"igniteRoleIds": "Quality Analyst,Test Lead"
}, {
"tenantId": "Essentials",
"igniteRoleIds": "Quality Analyst,Test Lead"
}]
]
}
data.tenantMapList.forEach(item => {
const igniteRole = item
igniteRole.map(igniteRole => {
const role = igniteRole
const changeData = igniteRole.igniteRoleIds.split(',').map(value => {
if (value === 'Quality Analyst')
return 1
if (value === 'Test Lead')
return 2
})
role.igniteRoleIds = changeData.toString()
return igniteRole
})
})
नतीजा:
{
"userId": "ab123",
"tenantMapList": [
[{
"tenantId": "Essentials",
"igniteRoleIds": "1,2"
}, {
"tenantId": "Essentials",
"igniteRoleIds": "1,2"
}, {
"tenantId": "Essentials",
"igniteRoleIds": "1,2"
}]
]
}