Rajeev Thakur
Rajeev Thakur

Reputation: 109

Extract Objects from list of objects based upon selected keys

I have a list of friuts. e.g.

var Fruits={
        "Banana": {
            "Price": "50",
            "quility": "good"
        },
        "Mango": {
            "Price": "100",
            "quility": "best"
        },
        "Orange": {
            "Price": "80",
            "quility": "good"
        },
        "Apple": {
            "Price": "150",
            "quility": "best"
        }
    }

And, an array which contain Fruits name which I want to extract. e.g.

var SpecificFruits = ["Banana", "Mango"]

based upon above array, I want to extract fruits object and want result like below.

var results={
        "Banana": {
            "Price": "50",
            "quility": "good"
        },
        "Mango": {
            "Price": "100",
            "quility": "best"
            "quility": "best"
        }
    }

Any help/suggestion would be appreciated.

Upvotes: 1

Views: 83

Answers (6)

Narendra Jadhav
Narendra Jadhav

Reputation: 10262

ES6

you could also use reduce() and Object.assign() to get the required result.

DEMO

var Fruits={"Banana": {"Price": "50","quility": "good"},"Mango": {"Price": "100","quility": "best"},"Orange": {"Price": "80","quility": "good"},"Apple": {"Price": "150","quility": "best"}},
    SpecificFruits = ["Banana", "Mango"];

let result = SpecificFruits.reduce((r,v)=>Object.assign(r,(Fruits[v]?{[v]:Fruits[v]}:{})),{});

console.log(result)
.as-console-wrapper { max-height: 100% !important; top: 0; }

Upvotes: 1

Suhas Bachhav
Suhas Bachhav

Reputation: 423

var SpecificFruits = ["Banana", "Mango"];

var result = {};
SpecificFruits.forEach(function(fruit) {
  if( fruits[ fruit ] ){
    result[ fruit ] = fruits[fruit];
  }
});

Upvotes: 1

Mihai Alexandru-Ionut
Mihai Alexandru-Ionut

Reputation: 48357

You can use _.pick method by passing the initial object and the array of properties desired.

var Fruits={ "Banana": { "Price": "50", "quility": "good" }, "Mango": { "Price": "100", "quility": "best" }, "Orange": { "Price": "80", "quility": "good" }, "Apple": { "Price": "150", "quility": "best" } }
    
var SpecificFruits = ["Banana", "Mango"]
var result = _.pick(Fruits ,SpecificFruits);
console.log(result);
<script src="https://cdn.jsdelivr.net/npm/[email protected]/lodash.min.js"></script>

Another method is to use reduce method in order to write a clean solution without any library.

var Fruits = {"Banana":{"Price":"50","quility":"good"},"Mango":{"Price":"100","quility":"best"},"Orange":{"Price":"80","quility":"good"},"Apple":{"Price":"150","quility":"best"}}
var SpecificFruits = ["Banana", "Mango"]

var result = SpecificFruits.reduce((fruits, elem) => { fruits[elem] = Fruits[elem]; return fruits; }, {});
console.log(result);

Upvotes: 0

RicardoAgra
RicardoAgra

Reputation: 680

var fruits={
    "Banana": {
        "Price": "50",
        "quility": "good"
    },
    "Mango": {
        "Price": "100",
        "quility": "best"
    },
    "Orange": {
        "Price": "80",
        "quility": "good"
    },
    "Apple": {
        "Price": "150",
        "quility": "best"
    }
}

var SpecificFruits = ["Banana", "Mango"];
var result = {};

SpecificFruits.forEach( function( fruit ){
    if( fruits[ fruit ] ){
        result[ fruit ] = fruits[ fruit ];
    }
});

console.log( result );

Upvotes: 1

Raeesaa
Raeesaa

Reputation: 3316

You can achieve this by simply doing:

let result = {}
SpecificFruits.forEach((fruit) => {
  if(Fruits[fruit]) {
    result[fruit] = Fruits[fruit]
  }
})

Upvotes: 1

Nenad Vracar
Nenad Vracar

Reputation: 122037

You can use _.pick method that takes object and array of keys, and returns a new object with properties from an array.

var Fruits = {"Banana":{"Price":"50","quility":"good"},"Mango":{"Price":"100","quility":"best"},"Orange":{"Price":"80","quility":"good"},"Apple":{"Price":"150","quility":"best"}}

var SpecificFruits = ["Banana", "Mango"]
const result = _.pick(Fruits, SpecificFruits);
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.js"></script>

Upvotes: 0

Related Questions