Filter array of objects, update object value and then replace

Viewed 3081

So I have some data that looks something like this:

const somedata = {
    abc: [
        {number: 1, letter: "a"},
        {number: 2, letter: "b"},
        {number: 3, letter: "c"},
        {number: 4, letter: "d"},
    ]
}

I filter out the object that I want like so:

const currentItem = somedata.abc.filter((item) => item.number === 1);

Which returns this:

[{number: 1, letter: "a"}]

At this point - I'd like to update a value - Something like this, but I'm not sure this is the best way?

currentItem[0].number = 100

Which returns this:

[{number: 100, letter: "a"}]

I'd then like to replace that object in somedata.abc - This is where I'm getting stuck. Any help would be really great!!

Thanks a lot

4 Answers

try it by yourself !
As each element of the array are objects, they are treated by reference and any changes will be made directly on it

const somedata = 
      { abc: 
        [ { number: 1, letter: 'a' } 
        , { number: 2, letter: 'b' } 
        , { number: 3, letter: 'c' } 
        , { number: 4, letter: 'd' } 
      ] }

somedata.abc.filter(x=>x.number===1)[0].number = 100

somedata.abc.forEach(el=>console.log( JSON.stringify(el)) )
.as-console-wrapper { max-height: 100% !important; top: 0; }

You can also create program like this to match your workflow exactly

const somedata = {
    abc: [
        {number: 1, letter: "a"},
        {number: 2, letter: "b"},
        {number: 3, letter: "c"},
        {number: 4, letter: "d"},
    ]
}

// Find item ID function
const getCurrentItemId = f => { for(let i = 0; i < somedata.abc.length; i++) if(somedata.abc[i].number === f) return i };

// Find ID by searching number key
const currentItemID = getCurrentItemId(1);

// Get copy of item data
const currentItem = { ...somedata.abc[currentItemID] };

// Now you do some logic with
// your currentItem data and 
// then update local value
currentItem.number = 100;

// Then if you want to put updated
// value back to original array...
somedata.abc[currentItemID] = currentItem;

// Log new object's array
console.log(somedata);

const somedata = {
abc: [
    {number: 1, letter: "a"},
    {number: 2, letter: "b"},
    {number: 3, letter: "c"},
    {number: 4, letter: "d"},
]
}

somedata.abc.filter(item => item.number===1).forEach(item => item.number = 100)

console.log(somedata)

Related