I have an array of object that looks like this:
const tickets =
[
{
ticketId: 'aaa',
authorId: 'abc',
replyCount: 0,
status: 'Open',
threads: [
{
threadId: 'abc',
authorId: 'abc',
direction: 'in',
content: 'blah blah blahh'
},
],
},
{
ticketId: 'bbb',
authorId: 'efg',
replyCount: 0,
status: 'Open',
threads: [
{
threadId: 'efg',
authorId: 'efg',
direction: 'in',
content: 'blah blah blahh'
},
],
},
.......
]
Now I want to access the array item where ticketId
equals aaa
and change it's threads
property.
I have tried doing using tickets['aaa'].threads = [ ... ]
but it throws these errors:
Eslint: Unsafe member access .threads on an 'any' value
TypeScript: Element implicitly has an 'any' type because index expression is not of type 'number'
CodePudding user response:
Find the index where ticketId
equals "aaa"
tickets[tickets.findIndex(v => v.ticketId === "aaa")].threads = [/* ... */];
With index validation:
const idx = tickets.findIndex(v => v.ticketId === "aaa");
if (idx > -1) tickets[idx].threads = [/* ... */];
CodePudding user response:
I hope the following is useful for you.
var getItem = id => tickets.find(item => item.ticketId === id);
getItem("aaa"); // {ticketId: 'aaa', authorId: 'abc', replyCount: 0, status: 'Open', threads: Array(1)}
CodePudding user response:
If you simply wanna mutate by property you can get the index with indexOf and mutate
tickets[tickets.findIndex(ticket => ticket.ticketId === "aaa")].threads = [] //mutate here however you want