1

Newbie here trying trying to create an object from an array I am getting from Supabase when I filter on certain cities.

Here is what the data looks like coming in:

[
    {
        "weather": "sunny",
        "percentage": "31"
    },
    {
        "weather": "rain",
        "percentage": "19"
    },
    {
        "weather": "cloudy",
        "percentage": "35"
    },
    {
        "weather": "snow",
        "percentage": "15"
    }
]

How can I take that and create this?

{
    sunny: 31,
    rain: 19,
    cloudy: 35,
    snow: 15,
}

I've tried searching through multiple questions here without much luck but if this is answered elsewhere please point me to it. I am new to JS and been through tutorial hell but can't seem to get this to output what I need.

Here is the async function to get the data from Supabase:

    async function getData() {
        const { data, error } = await supabase
            .from('cities')
            .select('weather, percentage')
            .match({ city: targetCity });
        if (error) throw new Error(error.message);

The closest I have gotten is to use this:

const result = data.map(Object.values);
console.log(result);

Which gives this output but it is still arrays:

(4) [Array(2), Array(2), Array(2), Array(2)]
0: (2) ['sunny', '31']
1: (2) ['rain', '19']
2: (2) ['cloudy', '35']
3: (2) ['snow', '15']
length: 4
[[Prototype]]: Array(0)

1 Answer 1

1
let input = [
    {
        "weather": "sunny",
        "percentage": "31"
    },
    {
        "weather": "rain",
        "percentage": "19"
    },
    {
        "weather": "cloudy",
        "percentage": "35"
    },
    {
        "weather": "snow",
        "percentage": "15"
    }
]

let output = {}

for (let elem of input ) {
    output[elem.weather] = elem.percentage 
}

console.log(output)

There are other ways to do it. But I am going with a simple loop as it is easier to understand. Let me know if this doesn't make sense.

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

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.