bashIt
bashIt

Reputation: 1036

Filter the value in object when the keys differ in an array

Response from get request :

[
    {
    id: 234,
    resturant_name : "dish",
    cusions : {1:"italian", 2 : "indian", 3: "foo"},
    address : NYI

    },
    {
        id: 235,
        resturant_name : "kebab",
        cusions : {1:"china", 2 : "indian", 3: "american"},
        address : NYI

    },
    {
        id: 236,
        resturant_name : "itrup",
        cusions : {1:"italian", 2: "american"},
        address : NYI

    }
]

I want to filter array which has a cusions type 'american', from the the above object I am expecting response

   {
        id: 235,
        resturant_name : "kebab",
        cusions : {1:"china", 2 : "indian", 3: "american"},
        address : NYI

    },
    {
        id: 236,
        resturant_name : "itrup",
        cusions : {1:"italian", 2: "american"},
        address : NYI

    }

after filtration ^^^

Upvotes: 3

Views: 773

Answers (2)

Nina Scholz
Nina Scholz

Reputation: 386848

You could use Array#filter in combination with Object.keys and Array#some for checking the wanted cuisine.

var data = [{ id: 234, restaurant: "dish", cuisines: { 1: "italian", 2: "indian", 3: "foo" }, address: "NYI" }, { id: 235, restaurant: "kebab", cuisines: { 1: "china", 2: "indian", 3: "american" }, address: "NYI" }, { id: 236, restaurant: "itrup", cuisines: { 1: "italian", 2: "american" }, address: "NYI" }],
    cuisine = 'american',
    result = data.filter(function (a) {
        return Object.keys(a.cuisines).some(function (k) {
            return a.cuisines[k] === cuisine;
        });
    });

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

ES6

var data = [{ id: 234, restaurant: "dish", cuisines: { 1: "italian", 2: "indian", 3: "foo" }, address: "NYI" }, { id: 235, restaurant: "kebab", cuisines: { 1: "china", 2: "indian", 3: "american" }, address: "NYI" }, { id: 236, restaurant: "itrup", cuisines: { 1: "italian", 2: "american" }, address: "NYI" }],
    cuisine = 'american',
    result = data.filter(a => Object.values(a.cuisines).includes(cuisine));

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

Upvotes: 1

Pankaj Shukla
Pankaj Shukla

Reputation: 2672

One of the ways to do:

var arr = [
    {
    id: 234,
    resturant_name : "dish",
    cusions : {1:"italian", 2 : "indian", 3: "foo"},
    address : 'NYI'

    },
    {
        id: 235,
        resturant_name : "kebab",
        cusions : {1:"china", 2 : "indian", 3: "american"},
        address : 'NYI'

    },
    {
        id: 236,
        resturant_name : "itrup",
        cusions : {1:"italian", 2: "american"},
        address : 'NYI'

    }
];

var res = arr.filter(x=> {
	return JSON.stringify(x.cusions).indexOf('american') >=0;
});

console.log(res);

Upvotes: 1

Related Questions