JavaScript Data Structures: Hash Table: Get all entries
Tags: beginners, tutorial, javascript, webdev
Published: 2020-04-14 13:06:44

---
title: "JavaScript Data Structures: Hash Table: Get all entries"
description: "JavaScript Data Structures: Hash Table: Get all entries"
published: true
tags: ["Beginners", "Tutorial", "JavaScript", "Webdev"]
series: JavaScript Data Structures
---

## Intro 🌐

[Last time](https://dev.to/miku86/javascript-data-structures-hash-table-get-values-anl), we learned how to get the values from our hash table.

Today, we'll learn how to get the whole entries (= all key-value pairs) of our Hash Table.

---

## Requirements 💭

We need the following parts to get the values from our Hash Table:

- a method to get the entries (`entries`)

---

## Starter Code ▶️

We start with [the code with the `set` method](https://dev.to/miku86/javascript-data-structures-hash-table-add-data-amc), so that we can use the `set` method to add some data.

```js
class Hashtable {
  constructor() {
    this.data = [];
    this.size = 0;
  }

  hash(key) {
    const chars = key.split("");
    const charCodes = chars.map((char) => char.charCodeAt());
    const charCodeSum = charCodes.reduce((acc, cur) => acc + cur);
    return charCodeSum;
  }

  set(key, value) {
    const hash = this.hash(key);

    if (!this.data[hash]) {
      this.data[hash] = [];
    }

    this.data[hash].push([key, value]);

    this.size++;
  }
}
```

If you are not familiar with the hash function, [re-read this post](https://dev.to/miku86/javascript-data-structures-hash-table-hash-function-2l71).

---

## Thoughts 💭

First, we should think about the constraints and possibilities:

- first, we declare an empty array for the entries
- then we iterate over the data array
- if there is data (= array of key-value pairs) at this specific index, iterate over this data (= the single key-value pairs)
- add the data (= key-value pair) to the entries array
- return the entries array

As you can see, the steps are nearly the same as in our [`keys` function](https://dev.to/miku86/javascript-data-structures-hash-table-get-keys-550b) and [`values` function](https://dev.to/miku86/javascript-data-structures-hash-table-get-values-anl)

---

## Example

We want to get all the entries.

```js
// current hash table data:
[
  [["age", 33]],
  [
    ["name", "miku86"],
    ["mean", false],
  ],
];

// desired data:
[
  ["age", 33],
  ["name", "miku86"],
  ["mean", false],
];
```

---

## Steps

```js
// current hash table data:
[
  [["age", 33]],
  [
    ["name", "miku86"],
    ["mean", false],
  ],
];

// then we iterate over the data array
[["age", 33]];

// if there is data (= array of key-value pairs) at this specific index
// then iterate over this data (= the single key-value pairs)
["age", 33];

// add the data (= key-value pair) to the entries array
[["age", 33]];

// then we iterate over the data array
[
  ["name", "miku86"],
  ["mean", false],
];

// if there is data (= array of key-value pairs) at this specific index
// then iterate over this data (= the single key-value pairs)
["name", "miku86"];

// add the data (= key-value pair) to the entries array
[
  ["age", 33],
  ["name", "miku86"],
];

// if there is data (= array of key-value pairs) at this specific index
// then iterate over this data (= the single key-value pairs)
["mean", false];

// add the data (= key-value pair) to the entries array
[
  ["age", 33],
  ["name", "miku86"],
  ["mean", false],
];

// desired data:
[
  ["age", 33],
  ["name", "miku86"],
  ["mean", false],
];
```

✅

---

## Implementation ⛑

```js
// a Hash Table class
class Hashtable {
  constructor() {
    this.data = [];
    this.size = 0;
  }

  hash(key) {
    const chars = key.split("");
    const charCodes = chars.map((char) => char.charCodeAt());
    const charCodeSum = charCodes.reduce((acc, cur) => acc + cur);
    return charCodeSum;
  }

  set(key, value) {
    const hash = this.hash(key);

    if (!this.data[hash]) {
      this.data[hash] = [];
    }

    this.data[hash].push([key, value]);

    this.size++;
  }

  entries() {
    // declare an empty array for the entries
    const entries = [];

    // iterate over the data array (I call a single array a "bucket")
    for (let bucket of this.data) {
      // if there is data (= array of key-value pairs) at this specific index
      if (bucket) {
        // iterate over this data (= the single key-value pairs)
        for (let item of bucket) {
          // add the data (= key-value pair) to the entries array
          entries.push(item);
        }
      }
    }

    // return the entries array
    return entries;
  }
}
```

**Note**: I'm using a `for ... of`-loop. If you don't know how this works, you can read about it on [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of). You can use whatever you want to use, a default `for`-loop, a `for ... in`-loop, a functional approach etc.

---

## Result

```js
// create a new hash table
const newHashtable = new Hashtable();

// add three new key-value pairs
newHashtable.set("name", "miku86");
newHashtable.set("mean", false);
newHashtable.set("age", 33);

// show the hash table data
console.log(newHashtable.data);
// [ <301 empty items>, [ [ 'age', 33 ] ], <115 empty items>, [ [ 'name', 'miku86' ], [ 'mean', false ] ] ]

// show the entries
console.log(newHashtable.entries());
// [['age', 33], ['name', 'miku86'], ['mean', false]] ✅
```

✅
---

## Next Part ➡️

We managed to write a function to get all entries, great work!

As you can see, most of the logic was nearly the same as in our [`keys` function](https://dev.to/miku86/javascript-data-structures-hash-table-get-keys-550b) and [`values` function](https://dev.to/miku86/javascript-data-structures-hash-table-get-values-anl).

Next time, we'll recap the Hash Table!

Need some mentoring? [Click here](https://miku86.com/mentoring)!

---

## Further Reading 📖

- [Simple Wiki: Hash Table](https://simple.wikipedia.org/wiki/Hash_table)
- [Wikipedia: Hash Table](https://en.wikipedia.org/wiki/Hash_table)
- [Wikibooks: Hash Table](https://en.wikibooks.org/wiki/Data_Structures/Hash_Tables)

---

## Questions ❔

- How would you implement the `entries`-function?
- Is there an alternative to our current approach, e.g. using already existing methods like `get`?
- How would you write this code in a functional style?