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