# Convert JavaScript array of arrays into object key value pairs

**URL:** <https://forum.freecodecamp.org/t/convert-javascript-array-of-arrays-into-object-key-value-pairs/334280>\
**Category:** General\
**Created:** [December 18, 2019, 3:29pm UTC](https://forum.freecodecamp.org/t/convert-javascript-array-of-arrays-into-object-key-value-pairs/334280 "2019-12-18T15:29:48Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![codenoobie](https://avatars.discourse-cdn.com/v4/letter/c/7feea3/32.png) [@codenoobie](https://forum.freecodecamp.org/u/codenoobie)\
**Post date:** [December 18, 2019, 3:29pm UTC](https://forum.freecodecamp.org/t/convert-javascript-array-of-arrays-into-object-key-value-pairs/334280/1 "2019-12-18T15:29:48Z")

</div>

I have an input array

```auto
let data = [
    ["", "usa", "canada"],
    ["2015", "20", "40"],
    ["2016", "30", "60"],
    ["2017", "20", "50"],
    ["2018", "60", "80"],
]

```

I need the output in json format like this

```auto
"data": {
    "2015": {
        "usa": 20,
         "canada": 40
    },
    "2016": {
        "usa": 30,
         "canada": 60
    },

    "2017": {
        "usa": 20,
         "canada": 50
    },

    "2018": {
        "usa": 60,
         "canada": 80
    }
}

```

As you can see, the first element in the first array is an empty string. I don’t need it in the output json. How to accomplish this using map/filter or for loop?

---

<div class="post-metadata">

**Author:** ![ArielLeslie](https://sea3.discourse-cdn.com/freecodecamp/user_avatar/forum.freecodecamp.org/arielleslie/32/264841_2.png) [@ArielLeslie](https://forum.freecodecamp.org/u/ArielLeslie)\
**Post date:** [December 18, 2019, 3:36pm UTC](https://forum.freecodecamp.org/t/convert-javascript-array-of-arrays-into-object-key-value-pairs/334280/2 "2019-12-18T15:36:37Z")

</div>

What have you tried so far? For what it’s worth, I wouldn’t use `map` and `filter` on this.

---

<div class="post-metadata">

**Author:** ![Sky020](https://sea3.discourse-cdn.com/freecodecamp/user_avatar/forum.freecodecamp.org/sky020/32/128093_2.png) [@Sky020](https://forum.freecodecamp.org/u/Sky020)\
**Post date:** [December 18, 2019, 3:54pm UTC](https://forum.freecodecamp.org/t/convert-javascript-array-of-arrays-into-object-key-value-pairs/334280/3 "2019-12-18T15:54:43Z")

</div>

Welcome, codenoobie.

This is not very scale-able, but it is a quick-fix:

```auto
let jsonData = {};
for (let i = 1; i< data.length; i++) {
  let ob1 = data[i][1];
  let ob2 = data[i][2];
  jsonData[data[i][0]] = { 'usa':ob1, 'canada':ob2 };
}

```

---

<div class="post-metadata">

**Author:** ![codenoobie](https://avatars.discourse-cdn.com/v4/letter/c/7feea3/32.png) [@codenoobie](https://forum.freecodecamp.org/u/codenoobie)\
**Post date:** [December 18, 2019, 4:20pm UTC](https://forum.freecodecamp.org/t/convert-javascript-array-of-arrays-into-object-key-value-pairs/334280/4 "2019-12-18T16:20:52Z")

</div>

Hey. Thanks for the help. This works! But is there a way without hardcoding the object keys ‘usa’ and ‘canada’?

---

<div class="post-metadata">

**Author:** ![ArielLeslie](https://sea3.discourse-cdn.com/freecodecamp/user_avatar/forum.freecodecamp.org/arielleslie/32/264841_2.png) [@ArielLeslie](https://forum.freecodecamp.org/u/ArielLeslie)\
**Post date:** [December 18, 2019, 4:27pm UTC](https://forum.freecodecamp.org/t/convert-javascript-array-of-arrays-into-object-key-value-pairs/334280/5 "2019-12-18T16:27:52Z")

</div>

Sure. Use `data[0][1]` and `data[0][2]`.

---

<div class="post-metadata">

**Author:** ![codenoobie](https://avatars.discourse-cdn.com/v4/letter/c/7feea3/32.png) [@codenoobie](https://forum.freecodecamp.org/u/codenoobie)\
**Post date:** [December 18, 2019, 4:32pm UTC](https://forum.freecodecamp.org/t/convert-javascript-array-of-arrays-into-object-key-value-pairs/334280/6 "2019-12-18T16:32:48Z")

</div>

In this case, length of each individual inner arrays is 3. It can also be more than 3.

---

<div class="post-metadata">

**Author:** ![ArielLeslie](https://sea3.discourse-cdn.com/freecodecamp/user_avatar/forum.freecodecamp.org/arielleslie/32/264841_2.png) [@ArielLeslie](https://forum.freecodecamp.org/u/ArielLeslie)\
**Post date:** [December 18, 2019, 4:35pm UTC](https://forum.freecodecamp.org/t/convert-javascript-array-of-arrays-into-object-key-value-pairs/334280/7 "2019-12-18T16:35:10Z")

</div>

You could do that. Think about how.

---

<div class="post-metadata">

**Author:** ![partylich](https://sea3.discourse-cdn.com/freecodecamp/user_avatar/forum.freecodecamp.org/partylich/32/126819_2.png) [@partylich](https://forum.freecodecamp.org/u/partylich)\
**Post date:** [December 18, 2019, 9:42pm UTC](https://forum.freecodecamp.org/t/convert-javascript-array-of-arrays-into-object-key-value-pairs/334280/8 "2019-12-18T21:42:29Z")

</div>

> [@ArielLeslie](#):
>
> …  
> For what it’s worth, I wouldn’t use `map` and `filter` on this.

I’m a bit off topic, but is there any particular reason why you wouldn’t use `map` here?

I wrote variations with `reduce` and `map`, with `for` loops, and with just `map`. The Big O should be equivalent (or I’ve miscalculated it), and the readability of both the `map` and `for` loop versions seemed comparable to me (the `reduce` version feels a bit brutal).

Are there specific style/perf/cognitive complexity improvements you had in mind when leading the OP away from `map` (and `filter`)?

---

<div class="post-metadata">

**Author:** ![ArielLeslie](https://sea3.discourse-cdn.com/freecodecamp/user_avatar/forum.freecodecamp.org/arielleslie/32/264841_2.png) [@ArielLeslie](https://forum.freecodecamp.org/u/ArielLeslie)\
**Post date:** [December 18, 2019, 9:47pm UTC](https://forum.freecodecamp.org/t/convert-javascript-array-of-arrays-into-object-key-value-pairs/334280/9 "2019-12-18T21:47:59Z")

</div>

Because the goal here is to convert an array to a single object. `map` and `filter` are for converting an array to another array.

---

<div class="post-metadata">

**Author:** ![ILM](https://sea3.discourse-cdn.com/freecodecamp/user_avatar/forum.freecodecamp.org/ilm/32/363239_2.png) [@ILM](https://forum.freecodecamp.org/u/ILM)\
**Post date:** [January 16, 2021, 11:30am UTC](https://forum.freecodecamp.org/t/convert-javascript-array-of-arrays-into-object-key-value-pairs/334280/10 "2021-01-16T11:30:00Z")

</div>

Closed on January 16, 2021, 11:30am UTC


