Skip to content

Instantly share code, notes, and snippets.

@IrhaAli
Last active November 25, 2022 01:25
Show Gist options
  • Save IrhaAli/7c6cd1c3d41ae4970b6fec9bd68de32c to your computer and use it in GitHub Desktop.
Save IrhaAli/7c6cd1c3d41ae4970b6fec9bd68de32c to your computer and use it in GitHub Desktop.
Functions that look at different aspects of the social network (eg. who's most popular)
const biggestFollower = function(data) {
let biggestFollower = 0;
let biggestFollowerKey = '';
for (const person in data) {
if (data[person]["follows"].length > biggestFollower) {
biggestFollower = data[person]["follows"].length;
biggestFollowerKey = person;
}
}
return biggestFollowerKey;
};
const mostPopular = function(data) {
let result = {};
for (const person in data) {
for (const following of data[person]["follows"]) {
if (result[following] === undefined) {
result[following] = 1;
} else {
result[following] += 1;
}
}
}
let resultValues = Object.values(result);
let resultKeys = Object.keys(result);
return resultKeys[resultValues.indexOf(Math.max(...resultValues))];
};
const whoFollowsMe = function(person, data) {
let result = [];
for (const pal in data) {
if (data[pal]["follows"].includes(person)) {
result.push(pal);
}
}
return result;
};
const printAll = function(data) {
let result = {};
for (const person in data) {
result[person] = {
following: data[person]["follows"],
followers: whoFollowsMe(person, data),
};
}
return result;
};
const eqArrays = function(firstArray, secondArray) {
if (firstArray.length !== secondArray.length) {
return false;
} else {
for (let i = 0; i < firstArray.length; i++) {
if (firstArray[i] !== secondArray[i]) {
return false;
}
}
}
return true;
};
const unrequitedFollowers = function(data) {
let unrequitedFollowers = [];
for (const person in data) {
if (!eqArrays(data[person]["follows"], whoFollowsMe(person, data))) {
unrequitedFollowers.push(person);
}
}
return unrequitedFollowers;
};
const mostPopularOver30 = function(data) {
let peopleOver30Followers = [];
let peopleOver30Name = [];
for (const person in data) {
if (data[person]["age"] >= 30) {
peopleOver30Name.push(person);
peopleOver30Followers.push(whoFollowsMe(person, data).length);
}
}
return peopleOver30Name[peopleOver30Followers.indexOf(Math.max(...peopleOver30Followers))];
};
const biggestFollowerOver30 = function(data) {
let peopleOver30 = {};
for (const person in data) {
if (data[person]["age"] >= 30) {
peopleOver30[person] = data[person];
}
}
return biggestFollower(peopleOver30);
};
const everyonesReach = function(data) {
let result = {};
for (const person in data) {
const totalFollowers = whoFollowsMe(person, data);
result[person] = {
totalFollowers,
totalFollowersFollowers: [...new Set(totalFollowers.map(follower => whoFollowsMe(follower, data)).flat())],
};
}
return result;
};
const data = {
f01: {
name: "Alice",
age: 15,
follows: ["f02", "f03", "f04"]
},
f02: {
name: "Bob",
age: 20,
follows: ["f05", "f06"]
},
f03: {
name: "Charlie",
age: 35,
follows: ["f01", "f04", "f06"]
},
f04: {
name: "Debbie",
age: 10,
follows: ["f01", "f02", "f03", "f05", "f06"]
},
f05: {
name: "Elizabeth",
age: 45,
follows: ["f04"]
},
f06: {
name: "Finn",
age: 25,
follows: ["f05"]
}
};
//Test Code
console.log(biggestFollower(data));
console.log(mostPopular(data));
console.log(printAll(data));
console.log(unrequitedFollowers(data));
console.log(mostPopularOver30(data));
console.log(biggestFollowerOver30(data));
console.log(everyonesReach(data));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment