_.forEach – Javascript Problem

This is an exercise taken from the Javascript: From Fundamentals to Functional course by Bianca Gandolfo on FrontEnd Masters.  The characters are taken from a game of Clue – a murder whodunit…

Here I have recreated a forEach() method in a slightly different way.  Instead of attaching it to the array prototype, I created it as a function which can take in either an array or an object and process it.

On line 3, I test to see if the “list” passed in is an array.  If so, I use a for loop to process the array.  If it is not an array, I assume it is an object and use a for…in loop to process it.  It returns an array of objects called suspectsList in either case.

const _ = {
  forEach(list, func) {
    if (Array.isArray(list)) {
      let temp = [];
      for (let i = 0; i < list.length; i++) {
        temp.push(func(list[i]));
        // console.log("i", i, "temp", temp);
      }
      return temp;
    } else {
      let temp = [];
      for (let key in list) {
        temp.push(func(list[key]));
        // console.log("key", key, "obj temp", temp);
      }
      return temp;
    }
  }
};

let suspects = ["Miss Scarlett", "Colonel Mustard", "Mrs. White"];
let objSuspects = {
  name1: "Miss Scarlett",
  name2: "Colonel Mustard",
  name3: "Mrs. White"
};

var suspectsList = [];

function CreateSuspectObjects(name) {
  // console.log("name inside CreateSuspectObjects", name, "typeOf", typeof name);
  return {
    name: name,
    color: name.split(" ")[1],
    speak() {
      console.log("my name is ", name);
    }
  };
}

function CreateSuspectsArray(basicArray) {
  suspectsList = [];
  _.forEach(basicArray, function(name) {
    suspect = CreateSuspectObjects(name);
    suspectsList.push(suspect);
  });
  return suspectsList;
}

console.log("suspectsList before run", suspectsList);
console.log("===== Array =====");
CreateSuspectsArray(suspects);
console.log("suspectsList", suspectsList);
// Output
// ===== Array =====
// suspectsList [ { name: 'Miss Scarlett',
//     color: 'Scarlett',
//     speak: [Function: speak] },
//   { name: 'Colonel Mustard',
//    color: 'Mustard',
//    speak: [Function: speak] },
//   { name: 'Mrs. White', color: 'White', speak: [Function: speak] } ]

console.log("===== Object =====");
CreateSuspectsArray(objSuspects);
console.log("suspectsList", suspectsList);
// Output
// ===== Object =====
// suspectsList [ { name: 'Miss Scarlett',
//     color: 'Scarlett',
//     speak: [Function: speak] },
//   { name: 'Colonel Mustard',
//     color: 'Mustard',
//     speak: [Function: speak] },
//   { name: 'Mrs. White', color: 'White', speak: [Function: speak] } ]

 

Leave a Reply

Your email address will not be published. Required fields are marked *