javascriptarraysecmascript-6lodash

How can I find and update values in an array of objects?


I have an array of objects. I want to find by some field, and then to change it:

var item = {...}
var items = [{id:2}, {id:2}, {id:2}];

var foundItem = items.find(x => x.id == item.id);
foundItem = item;

I want it to change the original object. How? (I don't care if it will be in Lodash too.)


Solution

  • You can use findIndex to find the index in the array of the object and replace it as required:

    var item = {...}
    var items = [{id:2}, {id:2}, {id:2}];
    
    var foundIndex = items.findIndex(x => x.id == item.id);
    items[foundIndex] = item;
    

    This assumes unique IDs. If your IDs are duplicated (as in your example), it's probably better if you use forEach:

    items.forEach((element, index) => {
        if(element.id === item.id) {
            items[index] = item;
        }
    });