Skip to content
Advertisement

Return unique array values from an array inside an array of objects

I can’t find a similar question and I’m a bit stuck. I have the following JSON array:

[
    {
        "Name": "element1",
        "Attributes": ["1", "2"]
    },

    {
        "Name": "element2",
        "Attributes": ["1","3" ]
    },
    {
        "Name": "element3",
        "Attributes": []
    }
]

I’m trying to create an array of all the unique elements in the “Attributes” property, but I’m having trouble looping through each object, and then looping through the array elements to return the unique values. I’m trying to do it with filter(), or map() preferably.

EDIT: I want an array of unique elements, so: [1,2,3].

Advertisement

Answer

You could do it with couple of Array methods. For example:

var result = [
    {
        "Name": "element1",
        "Attributes": ["1", "2"]
    },

    {
        "Name": "element2",
        "Attributes": ["1","3" ]
    },
    {
        "Name": "element3",
        "Attributes": []
    }
]

// map to [ ["1", "2"], ["1", "3"], [] ]
.map(item => item.Attributes)

// flatten to [ "1", "2", "1", "3" ]
.reduce((prev, curr) => prev.concat(curr), [])

// filter unique [ "1", "2", "3" ]
.filter((item, i, arr) => arr.indexOf(item) === i)

console.log(result)
User contributions licensed under: CC BY-SA
9 People found this is helpful
Advertisement