0

I have two arrays:

alphabet is composed of letters (e.g. the English alphabet). dictionary is a list of objects with words and definitions, 'word' being the key for the word value.

I want to build a new array called frequency which would contain the number of words that start with each letter in the alphabet array, with indices corresponding to the alphabet array.

I've managed to come up with the following:

alphabet.forEach(function(letter) {
        frequency = dictionary.filter(item => item['word'].toLowerCase().startsWith(letter)).length;
    });

This gets me individual values for frequency. What is the best syntax in Javascript for building an array of those values? Is it another filter? Or should the code use the current forEach manually with a incremental index?

6
  • Can you make your question clear. Commented Sep 13, 2021 at 12:08
  • Convert frequency variable to a key-value pair such as object, map or set Commented Sep 13, 2021 at 12:09
  • What exactly do you want? Commented Sep 13, 2021 at 12:10
  • Can you provide sample data for alphabet variable and how you want the output result to be Commented Sep 13, 2021 at 12:10
  • Please add the values of alphabet, dictionary also the expected value for frequency to make it more clear. Commented Sep 13, 2021 at 12:18

2 Answers 2

1

First, let's get some example data. We'll ignore anything that isn't related to the question.

const alphabet = 'abcdefghijklmnopqrstuvwxyz'.split('')
var dictionary = [{'word': 'alpha'}, {'word': 'beta'}, {'word': 'balloon'}]

Then we'll create a results variable, which will hold an array of all results in alphabetical order.

var results = []

Now we loop over the same way you did before, but we'll push each result to our list.

alphabet.forEach(function(letter) {
  frequency = dictionary.filter(item => item['word'].toLowerCase().startsWith(letter)).length;
  results.push(frequency);
});

As an alternative solution that allows us to more easily look through our results, we'll make results an object, and use letters as keys.

var results = {};
alphabet.forEach(function(letter) {
  frequency = dictionary.filter(item => item['word'].toLowerCase().startsWith(letter)).length;
  results[letter] = frequency;
});
Sign up to request clarification or add additional context in comments.

Comments

1

Using reduce, you can easily make a new object with the letter as the key and an array of matches as the value.

const words = ["abba", "ant", "apple", "bannana", "barn", "car", "cat"];

const alphabet = "abcdefghijklmnopqrstuvwxyz".split("");

const result = alphabet.reduce((a, letter) => {
  a[letter] = words.filter(word => word.toLowerCase().startsWith(letter));
  return a;
}, {});

console.log(result);

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.