0

I have data-structure like this

        var masterObj = [{
            "_id" : "2i4NGzpEpnKZhkxY8",
            "master_sku" : "UAT43-S",
            "available" : [ 
                {
                    "marketplace_name" : "xyx",
                    "doc_id" : "WCw8Hsyw4D3ab8TAZ"
                }
            ]
        }
        {
            "_id" : "2mf6hghQ7f32CrA3X",
            "master_sku" : "UAT43-XL",
            "available" : [ 
                {
                    "marketplace_name" : "abc",
                    "doc_id" : "QduDKpT2HqmuaFHRz",
                }
            ]
        }]

I am using underscor.js and my Query is like this

  var result = _.findWhere(masterObj, { "available.doc_id": "WCw8Hsyw4D3ab8TAZ" });    

Required result is

   {
        "_id" : "2i4NGzpEpnKZhkxY8",
        "master_sku" : "UAT43-S",
        "available" : [ 
            {
                "marketplace_name" : "xyx",
                "doc_id" : "WCw8Hsyw4D3ab8TAZ"
            }
        ]
    }

How can i get desigred output. Thanks in advance.

1 Answer 1

2

You don't need underscore for this. Use JavaScript's native find array method with a callback function to find an element available array that has the correct doc_id.

If you know that available will only have one element:

const arr = [{"_id":"2i4NGzpEpnKZhkxY8","master_sku":"UAT43-S","available":[{"marketplace_name":"xyx","doc_id":"WCw8Hsyw4D3ab8TAZ"}]},{"_id":"2mf6hghQ7f32CrA3X","master_sku":"UAT43-XL","available":[{"marketplace_name":"abc","doc_id":"QduDKpT2HqmuaFHRz"}]}]

const result = arr.find(obj => {
  return obj.available[0].doc_id === 'WCw8Hsyw4D3ab8TAZ';
});

console.log(result);  

If available has more than one element use some:

const arr = [{"_id":"2i4NGzpEpnKZhkxY8","master_sku":"UAT43-S","available":[{"marketplace_name":"xyx","doc_id":"WCw8Hsyw4D3ab8TAZ"},{"marketplace_name":"bob","doc_id":"WCw8Hsyw4D3a8TAZ"}]},{"_id":"2mf6hghQ7f32CrA3X","master_sku":"UAT43-XL","available":[{"marketplace_name":"abc","doc_id":"QduDKpT2HqmuaFHRz"}]}]

const result = arr.find(obj => {
  return obj.available.some(el => el.doc_id === 'WCw8Hsyw4D3ab8TAZ');
});

console.log(result);

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.