I'm struggling to update all "new" attributes too false. Below is an example object.
const msgdata = {
"1511207758": {
"userid": "1000015977",
"text": "hello",
"new": false,
"subjecttitle": null,
"subjectcontent": null,
"datetime": "2017-11-20T19:55:58.000Z"
},
"1511277428": {
"userid": "1000000000",
"text": "hey hi",
"new": false,
"subjecttitle": null,
"subjectcontent": null,
"datetime": "2017-11-21T15:17:08.000Z"
},
"1640341426": {
"userid": "1000000000",
"text": "hellow how are you?",
"new": false,
"subjecttitle": null,
"subjectcontent": null,
"datetime": "2021-12-24T10:23:45.706Z"
},
"1640342296": {
"userid": "1000000000",
"text": "asdfasdf",
"new": true,
"subjecttitle": null,
"subjectcontent": null,
"datetime": "2021-12-24T10:38:16.089Z"
},
"1640342382": {
"userid": "1000000000",
"text": "fxvfv",
"new": true,
"subjecttitle": null,
"subjectcontent": null,
"datetime": "2021-12-24T10:39:41.910Z"
}
}
when I try the following I mess up the object structure changes to an array but I need to maintain the object/key structure - just change the new value to false.
let newMessages = {}
if (payload.length > 0) {
payload.map((item) => {
if (messagesData && messagesData[item.userid]) {
newMessages = Object.keys(messagesData[item.userid].messages).map((key) => ({ ...newMessages[item.userid].messages[key], new: false }))
}
return true
})
console.dir('newMessages')
console.dir(newMessages)
the return object is a standard array - map does that... eg: 0,1,2 keys...
How can I maintain the object structure and just change the new attr.
thx
CodePudding user response:
You could map()
the objects entries, change the new
value to false
and return entries to create a new object from.
const msgdata = {
"1511207758": {
"userid": "1000015977",
"text": "hello",
"new": false,
"subjecttitle": null,
"subjectcontent": null,
"datetime": "2017-11-20T19:55:58.000Z"
},
"1511277428": {
"userid": "1000000000",
"text": "hey hi",
"new": false,
"subjecttitle": null,
"subjectcontent": null,
"datetime": "2017-11-21T15:17:08.000Z"
},
"1640341426": {
"userid": "1000000000",
"text": "hellow how are you?",
"new": false,
"subjecttitle": null,
"subjectcontent": null,
"datetime": "2021-12-24T10:23:45.706Z"
},
"1640342296": {
"userid": "1000000000",
"text": "asdfasdf",
"new": true,
"subjecttitle": null,
"subjectcontent": null,
"datetime": "2021-12-24T10:38:16.089Z"
},
"1640342382": {
"userid": "1000000000",
"text": "fxvfv",
"new": true,
"subjecttitle": null,
"subjectcontent": null,
"datetime": "2021-12-24T10:39:41.910Z"
}
}
const result = Object.fromEntries(Object.entries(msgdata).map(([k, v]) => {
return [k, { ...v, new: false }]
}));
console.log(result);