Instantly share code, notes, and snippets.
IrhaAli/socialNetwork.js Secret
Last active
November 25, 2022 01:25
-
Star
(0)
0
You must be signed in to star a gist -
Fork
(0)
0
You must be signed in to fork a gist
-
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)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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