Skip to content

Instantly share code, notes, and snippets.

@thajo
Created September 22, 2015 13:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save thajo/c769b1ea93a47fb17e8c to your computer and use it in GitHub Desktop.
Save thajo/c769b1ea93a47fb17e8c to your computer and use it in GitHub Desktop.
"use strict";
function getHighestValuesInFrequency(frequency) {
// frequency är {jacob: 1, mats : 2, johan: 1, john : 2}
var keys = Object.keys(frequency);
// keys är nu ["jacob", "mats", "johan", "john"]
// Sortera så de med högst värde kommer först
var sortedKeys = keys.sort(function(a, b) {
// använd debuggern för att se vad a, b, frequency[a] och frequency[b] är
return frequency[b] - frequency[a];
});
// sortedKeys är nu ["mats", "john", "jacob", "johan"]
// Vi är ju bara intresserade av de med högst värde
keys = Object.keys(frequency);
// keys är nu ["jacob", "mats", "johan", "john"]
var highestKeys = keys.filter(function(key) {
var highestKey = sortedKeys[0]; // ta den första i den sorterade arrayen så vet vi vad det högsta numret är
// jämför varje värde frequency och ser om det är lika med det högsta.
// uttrycket nedan returnerar true om aktuellt element ska vara med, returneras false ska det inte vara med
// dvs vi sparar bara de "keys" som är aktuella och som vi vill jobba vidare med
return frequency[key] === frequency[highestKey];
});
// highestKeys bör nu vara ["mats", "john"], dvs de namn som har högst frekvens i orginalobjektet
// frequency => {jacob: 1, mats : 2, johan: 1, john : 2}
return highestKeys;
}
var object = {jacob: 1, mats : 2, johan: 1, john : 2}; // detta objekt har vi redan fått och använder som frekvenstabell
var result = getHighestValuesInFrequency(object);
console.log(result);
// ##################
// Samma med for-loop istället för filter
function getHighestValuesInFrequencyByLoop(frequency) {
// frequency är {jacob: 1, mats : 2, johan: 1, john : 2}
var keys = Object.keys(frequency);
// keys är nu ["jacob", "mats", "johan", "john"]
// Sortera som vanligt så vi kan hitta högsta värdet
var sortedKeys = keys.sort(function(a, b) {
return frequency[b] - frequency[a];
});
// sortedKeys är nu ["mats", "john", "jacob", "johan"]
// Vi är ju bara intresserade av de med högst värde
keys = Object.keys(frequency);
// keys är nu ["jacob", "mats", "johan", "john"]
// keys är en array som vi ska loopa igenom för att kunna få fram de med högst värde i frequency
var length = keys.length;
// vi skapar en tom array där vi kan sparar de som vi filtrerar ut
var highestKeys = [];
// Eftersom vi sorterat sorted keys kan vi plocka ut den med högst värder
var highestKey = sortedKeys[0]; // ta den första i den sorterade arrayen så vet vi vad det högsta numret är
// highestKey är "mats"
for(var i = 0; i < length; i += 1) {
// Vi plockar ut varje key och jämför
var key = sortedKeys[i];
// key är en sträng
// Vi använder vår frekvenstabell (objektet frequency) för att slå upp varje namns värde
// och jämför med det högsta värdet som vi tagit reda på
// om de är lika vet vi att vi ska stoppa in det i arrayen som sparar på keys (namnen) med högsta värde
if (frequency[key] === frequency[highestKey]) {
highestKeys.push(key);
}
}
// highestKeys bör nu vara ["mats", "john"], dvs de namn som har högst frekvens i orginalobjektet
// frequency => {jacob: 1, mats : 2, johan: 1, john : 2}
return highestKeys;
}
var object = {jacob: 1, mats : 2, johan: 1, john : 2}; // detta objekt har vi redan fått och använder som frekvenstabell
result = getHighestValuesInFrequencyByLoop(object);
console.log(result);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment