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] } ]