Issue
Dynamic JSON value created and set in session similar to below. Each TestDataUsedDetail
object has Work object and Work
Object contains workId
and workName
.
If workId include string -old-
then requiredWork value should be set as oldWork
If workId does not includes the string -old-
then requiredWork should be newWork.
If both are mixed then requiredWork should be All.
I tried the following but it is not working. How to do this effectively?
const workData = {
"TestData": "NewData",
"TestDataDetail": {
"TestData": "OldData",
"address": {
"add1": 207,
"add2": "east Stret"
},
"passcode": null
},
"TestDataUsedDetail": [{
"Work": {
"workId": "work-data-new",
"workName": "Brand"
}
},
{
"Work": {
"workId": "work-old-data",
"workName": "Work Data Used"
}
},
{
"Work": {
"workId": "work-new-progress",
"workName": null
}
},
{
"Work": {
"workId": "work-old-data2",
"workName": null
}
},
{
"Work": {
"workId": "work-old-progress",
"workName": "Work Data not used"
}
},
{
"Work": {
"workId": "work-pending-scheduled",
"workName": null
}
}
],
"WorkInfo": [
],
"Workid": null
}
let workDetails = [];
let work = [];
var workRequired, workNew, oldWork;
workData.TestDataUsedDetail.forEach(detail => {
workDetails = workData.TestDataUsedDetail;
for (const key in workDetails) {
if (workDetails.hasOwnProperty(key)) {
var element = workDetails[key];
if (element.Work.workId.includes('-old-')) {
workNew = true;
} else {
oldWork = true;
}
}
}
});
if (workNew && oldWork) {
workRequired = "All";
} else if (workNew) workRequired = "New";
else if (oldWork) workRequired = "old";
Expected Result:
workRequired = "All"
Solution
Do you mean this?
const workData = { "TestData": "NewData", "TestDataDetail": { "TestData": "OldData", "address": { "add1": 207, "add2": "east Stret" }, "passcode": null }, "TestDataUsedDetail": [{ "Work": { "workId": "work-data-new", "workName": "Brand" } }, { "Work": { "workId": "work-old-data", "workName": "Work Data Used" } }, { "Work": { "workId": "work-new-progress", "workName": null } }, { "Work": { "workId": "work-old-data2", "workName": null } }, { "Work": { "workId": "work-old-progress", "workName": "Work Data not used" } }, { "Work": { "workId": "work-pending-scheduled", "workName": null } } ], "WorkInfo": [ ], "Workid": null }
workData.TestDataUsedDetail.forEach(({Work}) => {
Work.required = Work.workId.indexOf("-old-") !=-1 ? "oldWork " : "newWork "
console.log(Work)
})
console.log(workData)
Or this:
const workData = { "TestData": "NewData", "TestDataDetail": { "TestData": "OldData", "address": { "add1": 207, "add2": "east Stret" }, "passcode": null }, "TestDataUsedDetail": [{ "Work": { "workId": "work-data-new", "workName": "Brand" } }, { "Work": { "workId": "work-old-data", "workName": "Work Data Used" } }, { "Work": { "workId": "work-new-progress", "workName": null } }, { "Work": { "workId": "work-old-data2", "workName": null } }, { "Work": { "workId": "work-old-progress", "workName": "Work Data not used" } }, { "Work": { "workId": "work-pending-scheduled", "workName": null } } ], "WorkInfo": [ ], "Workid": null }
const reducedWork = workData.TestDataUsedDetail.reduce((acc, {Work}) => {
acc[Work.workId.indexOf("-old-") != -1 ? "old" : "new"]++;
return acc;
}, {new: 0,old: 0});
let workRequired;
if (reducedWork.new > 0 && reducedWork.old > 0) workRequired = "all";
else workRequired = reducedWork.new > 0 ? "new" : "old"
console.log(workRequired)