3

I have been scanning through stackoverflow topics and couldn't find answer to the problem i am having.

What i need to do is to find object inside nested (2 depths) array by some of the values and then update other of its values. I managed to put together the finding and also setting seems to work, the problem is that lodash does return main object and it updates main object, not the nested one i actually need.

lets take this structure:

var data = [
    {
        name: 'I',
        status: "0",
        categories: [
            {
                name: 'I1',
                status: "0",
                specifics: [
                    {
                        name: "I1a",
                        status: "0",
                    }
                ]
            }
        ]
    }
];

i need to find object inside specifics by its name and then update its status.

so lets try simple find first:

var find = _.find(data, { categories: [ { specifics: [ { name: "I1a" } ] } ]});

this is working but it returns the object with name: I so first main one.

so then if i try to update with this:

var set = _.set(_.find(data, { categories: [ { specifics: [ { name: "I1a" } ] } ]}), 'status', "1");

It also does work but it updates status of I instead of what i was looking for which is I1a.

Is there a way to make finding and therefore setting to return / work on actually queried object ?

    var data = [
        {
            name: 'I',
            status: "0",
            categories: [
                {
                    name: 'I1',
                    status: "0",
                    specifics: [
                        {
                            name: "I1a",
                            status: "0",
                        }
                    ]
                }
            ]
        }
    ];

var find = _.find(data, { categories: [ { specifics: [ { name: "I1a" } ] } ]})

console.log('find', find);

var set = _.set(_.find(data, { categories: [ { specifics: [ { name: "I1a" } ] } ]}), 'status', "1");

console.log('set', set);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js"></script>
Mevia
  • 1,517
  • 1
  • 16
  • 51

0 Answers0