Javascript-tietorakenteita

Katso lähdekoodista javascript-koodi ja javascript-consolesta tuloste ja vertaa python-versioon.

Koodi malliksi kopioituna myös tähän:


"use strict"

// vrt. python-versioon: http://appro.mit.jyu.fi/web-sovellukset/luennot/python/structures.py
// Luodaan Object-tyyppinen olio
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object
// Toimii lähes kuten Pythonin Dict-tyyppi
let henkilot = {
	1 : "Tommi Lahtonen", 
	2 : "Kalle Kehveli", 
	3 : "Maija Virtanen",
	4 : "Matti Virtanen",
	5 : "Ville Kehveli",
	6 : "Kalle Kehveli",
	7 : null
}

console.dir(henkilot);

// sama kuin edellä mutta avaimina muuta kuin kokonaislukuja
let henkilot2 = {
	"tunniste1" : "Lammi Tohtonen", 
	"tunniste2" : "Nalle Kehveli", 
	"tunniste3" : "Miia Virtanen",
	"tunniste4" : "Ville Virtanen",
	"tunniste5" : "Kalle Kehveli",
	"tunniste6" : "Lammi Tohtonen"
}

console.dir(henkilot2);

// Object, jonka avainten arvoina taulukoita

let jutut1 = {
	1 : ["Nalle", "Lego", "Pipo"], 
	2 : ["Lusikka","Veitsi","Haarukka", "Spork"], 
	3 : [33, 44, 55, 66, 77, 88],
	4 : [1,2,3,"Lusikka","Nalle","Pipo", 100],
	5 : [],
	6 : ["Just one"]
}

console.dir(jutut1);

// taulukko jonka alkioina on objecteja
let jutut2 = [
	{1:"foo", 2:"bar", 3:"foobar"},
	{10:"foo", 11:"bar", 13:"foobar"},
	{"1":"foo", "2":"bar", "3":"foobar"},
	{10:1, 11:2, 13:3},
]

console.dir(jutut2);

let kaikki = [
	henkilot, henkilot2, jutut1, jutut2
]

console.dir(kaikki);

// silmukassa kaikki avaimet ja niiden arvot
// kts. http://stackoverflow.com/questions/921789/how-to-loop-through-plain-javascript-object-with-objects-as-members
for (let henkilo in henkilot) {
  console.log(henkilo + " : " + henkilot[henkilo]);
}
// toinen vaihtoehto
Object.keys(henkilot).forEach(function(henkilo) {
  console.log(henkilo + " : " + henkilot[henkilo]);
});


// käydään läpi henkilöt ja kokeillaan löytyy aina henkilön avainta vastaavat tiedot
// jutut1- ja jutut2-objekteista.
for (let id in henkilot) {
    // tulee undefined siitä avaimesta jolle ei löydy arvoa
    console.log( "Jutut1: " + id + " : " + jutut1[id] );
    // tulee undefined niistä avaimista joille ei löydy arvoa
    // javascript ei välitä avaimen tyypistä...
    console.log( "Jutut2: " + id + " : " + jutut2[id] );
    // pitää muodostaa oikeanlainen avain
    console.log( "Henkilot2: " + id + " : " + henkilot2["tunniste" + id] );
}

// luodaan sisakkaiset objectit joihin tallennetaan tietoja jokaisesta henkilosta
let tiedot = {};
    
for (let i in henkilot) {
	// taytyy kayttaa uniikkia avainta. Nimi ei kay koska samannimisia
	// voi olla useita
	// Luodaan uusi Object

	let henkilo = {}
	// kopioidaan nimi
	henkilo["Nimi"] = henkilot[i]
	henkilo["Osoite"] = "Unknown"
	henkilo["Postinumero"] = "00000" 
	henkilo["Puhelin"] = "+358000000"
	henkilo["Data"] = [1,2,3,4,5,6,7,8,9,10] // whatever dataa listana
	// tallennetaan tiedot-Objectiin
	tiedot[i] = henkilo

}

console.dir(tiedot);

// sama kuin edella mutta lyhyempana
let tiedot2 = {};
for (let i in henkilot) {
	tiedot2[i] = {
		"Nimi": henkilot[i],
		"Osoite": "Unknown",
		"Postinumero": "00000",
		"Puhelin": "+358000000",
		"Data" : [1,2,3,4,5,6,7,8,9,10]
	}
}

console.dir(tiedot2);

// sama kuin aiemmin mutta generoidaan satunnaista dataa
let tiedot3 = {};
for (let i in henkilot) {
    let osoitteet = ["Koivukuja", "Kaarnatie", "Keskuskatu", "Kotikatu", "Viitatie", "Valtatie"];
    let postinumerot = []
    for( let j = 0; j <= 99900; j=j+100) { 
        postinumerot.push(pad(j,5));
    }
    let suunta = ["050","040", "044"];
    let randomdata = [];
    for( let j = 0; j < 10; j++) {
        randomdata.push( getRandomInt(0,100) );
    }
    
	tiedot3[i] = {
		"Nimi": henkilot[i],
		"Osoite": osoitteet[ getRandomInt(0, osoitteet.length) ] + " " + getRandomInt(1,32),
		"Postinumero": postinumerot[ getRandomInt(0, postinumerot.length) ],
		"Puhelin": "+358" + suunta[ getRandomInt(0, suunta.length) ] + pad(getRandomInt(0,999999),6),
		"Data": randomdata
	}
}

//console.log(tiedot3);
console.dir(tiedot3);

/* apufunktioita */
// Palauttaa satunnaisen numeron halutulta väliltä
function getRandomInt(min, max) {
  min = Math.ceil(min);
  max = Math.floor(max);
  return Math.floor(Math.random() * (max - min)) + min;
}
// muuttaa numeron merkkijonoksi ja lisää eteen 0-merkkejä kunnes haluttu pituus saavuteen
function pad(num, size) {
    let s = num+"";
    while (s.length < size) s = "0" + s;
    return s;
}

for (let key in tiedot3) {
    let tuloste = key;
    for(let j in tiedot3[key]) {
        tuloste += " " + j + " : " + tiedot3[key][j];
    }
    console.log(tuloste)
}

console.log( JSON.stringify(henkilot));
console.log( JSON.stringify(henkilot2));
console.log( JSON.stringify(jutut1));
console.log( JSON.stringify(jutut2));
console.log( JSON.stringify(tiedot));
console.log( JSON.stringify(tiedot2));
console.log( JSON.stringify(tiedot3));

// sama vielä toiseen suuntaan eli javascript-muuttujien alustus json-muodosta...
// jsonihan on suoraan javascriptiä...

henkilot = {"1": "Tommi Lahtonen", "2": "Kalle Kehveli", "3": "Maija Virtanen", "4": "Matti Virtanen", "5": "Ville Kehveli", "6": "Kalle Kehveli", "7": null}
henkilot2 = {"tunniste5": "Kalle Kehveli", "tunniste4": "Ville Virtanen", "tunniste6": "Lammi Tohtonen", "tunniste1": "Lammi Tohtonen", "tunniste3": "Miia Virtanen", "tunniste2": "Nalle Kehveli"}
jutut1 = {"1": ["Nalle", "Lego", "Pipo"], "2": ["Lusikka", "Veitsi", "Haarukka", "Spork"], "3": [33, 44, 55, 66, 77, 88], "4": [1, 2, 3, "Lusikka", "Nalle", "Pipo", 100], "5": [], "6": ["Just one"]}
jutut2 = [{"1": "foo", "2": "bar", "3": "foobar"}, {"10": "foo", "11": "bar", "13": "foobar"}, {"1": "foo", "3": "foobar", "2": "bar"}, {"10": 1, "11": 2, "13": 3}]
tiedot = {"1": {"Postinumero": "00000", "Nimi": "Tommi Lahtonen", "Data": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], "Puhelin": "+358000000", "Osoite": "Unknown"}, "2": {"Postinumero": "00000", "Nimi": "Kalle Kehveli", "Data": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], "Puhelin": "+358000000", "Osoite": "Unknown"}, "3": {"Postinumero": "00000", "Nimi": "Maija Virtanen", "Data": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], "Puhelin": "+358000000", "Osoite": "Unknown"}, "4": {"Postinumero": "00000", "Nimi": "Matti Virtanen", "Data": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], "Puhelin": "+358000000", "Osoite": "Unknown"}, "5": {"Postinumero": "00000", "Nimi": "Ville Kehveli", "Data": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], "Puhelin": "+358000000", "Osoite": "Unknown"}, "6": {"Postinumero": "00000", "Nimi": "Kalle Kehveli", "Data": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], "Puhelin": "+358000000", "Osoite": "Unknown"}, "7": {"Postinumero": "00000", "Nimi": null, "Data": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], "Puhelin": "+358000000", "Osoite": "Unknown"}}
tiedot2 = {"1": {"Postinumero": "00000", "Nimi": "Tommi Lahtonen", "Data": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], "Puhelin": "+358000000", "Osoite": "Unknown"}, "2": {"Postinumero": "00000", "Nimi": "Kalle Kehveli", "Data": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], "Puhelin": "+358000000", "Osoite": "Unknown"}, "3": {"Postinumero": "00000", "Nimi": "Maija Virtanen", "Data": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], "Puhelin": "+358000000", "Osoite": "Unknown"}, "4": {"Postinumero": "00000", "Nimi": "Matti Virtanen", "Data": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], "Puhelin": "+358000000", "Osoite": "Unknown"}, "5": {"Postinumero": "00000", "Nimi": "Ville Kehveli", "Data": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], "Puhelin": "+358000000", "Osoite": "Unknown"}, "6": {"Postinumero": "00000", "Nimi": "Kalle Kehveli", "Data": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], "Puhelin": "+358000000", "Osoite": "Unknown"}, "7": {"Postinumero": "00000", "Nimi": null, "Data": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], "Puhelin": "+358000000", "Osoite": "Unknown"}}
tiedot3 = {"1": {"Postinumero": "53800", "Nimi": "Tommi Lahtonen", "Data": [64, 15, 14, 69, 29, 96, 25, 78, 11, 41], "Puhelin": "+358040226323", "Osoite": "Keskuskatu 27"}, "2": {"Postinumero": "58800", "Nimi": "Kalle Kehveli", "Data": [19, 48, 16, 96, 88, 27, 54, 50, 44, 26], "Puhelin": "+358044086662", "Osoite": "Koivukuja 5"}, "3": {"Postinumero": "10300", "Nimi": "Maija Virtanen", "Data": [29, 59, 74, 56, 91, 48, 41, 75, 19, 27], "Puhelin": "+358040111859", "Osoite": "Kotikatu 25"}, "4": {"Postinumero": "28000", "Nimi": "Matti Virtanen", "Data": [14, 88, 91, 7, 30, 42, 9, 34, 37, 16], "Puhelin": "+358050814382", "Osoite": "Viitatie 26"}, "5": {"Postinumero": "44700", "Nimi": "Ville Kehveli", "Data": [7, 87, 6, 70, 80, 72, 34, 16, 83, 97], "Puhelin": "+358050215396", "Osoite": "Keskuskatu 8"}, "6": {"Postinumero": "52700", "Nimi": "Kalle Kehveli", "Data": [79, 87, 60, 52, 54, 25, 85, 1, 92, 19], "Puhelin": "+358040041636", "Osoite": "Kaarnatie 5"}, "7": {"Postinumero": "56900", "Nimi": null, "Data": [24, 38, 75, 95, 14, 48, 83, 46, 42, 30], "Puhelin": "+358040679787", "Osoite": "Kaarnatie 31"}}


Output

Tuloste konsolista (paitsi console.dir-komennon osuudet):

{1: "Tommi Lahtonen", 2: "Kalle Kehveli", 3: "Maija Virtanen", 4: "Matti Virtanen", 5: "Ville Kehveli", 6: "Kalle Kehveli", 7: null}
 struct.html:22
{tunniste1: "Lammi Tohtonen", tunniste2: "Nalle Kehveli", tunniste3: "Miia Virtanen", tunniste4: "Ville Virtanen", tunniste5: "Kalle Kehveli", tunniste6: "Lammi Tohtonen"}
 struct.html:34
{1: Array[3], 2: Array[4], 3: Array[6], 4: Array[7], 5: Array[0], 6: Array[1]}
 struct.html:47
[Object, Object, Object, Object]
 struct.html:57
[Object, Object, Object, Array[4]]
 struct.html:63
1 : Tommi Lahtonen struct.html:68:3
2 : Kalle Kehveli struct.html:68:3
3 : Maija Virtanen struct.html:68:3
4 : Matti Virtanen struct.html:68:3
5 : Ville Kehveli struct.html:68:3
6 : Kalle Kehveli struct.html:68:3
7 : null struct.html:68:3
1 : Tommi Lahtonen struct.html:72:3
2 : Kalle Kehveli struct.html:72:3
3 : Maija Virtanen struct.html:72:3
4 : Matti Virtanen struct.html:72:3
5 : Ville Kehveli struct.html:72:3
6 : Kalle Kehveli struct.html:72:3
7 : null struct.html:72:3
Jutut1: 1 : Nalle,Lego,Pipo struct.html:80:5
Jutut2: 1 : [object Object] struct.html:83:5
Henkilot2: 1 : Lammi Tohtonen struct.html:85:5
Jutut1: 2 : Lusikka,Veitsi,Haarukka,Spork struct.html:80:5
Jutut2: 2 : [object Object] struct.html:83:5
Henkilot2: 2 : Nalle Kehveli struct.html:85:5
Jutut1: 3 : 33,44,55,66,77,88 struct.html:80:5
Jutut2: 3 : [object Object] struct.html:83:5
Henkilot2: 3 : Miia Virtanen struct.html:85:5
Jutut1: 4 : 1,2,3,Lusikka,Nalle,Pipo,100 struct.html:80:5
Jutut2: 4 : undefined struct.html:83:5
Henkilot2: 4 : Ville Virtanen struct.html:85:5
Jutut1: 5 :  struct.html:80:5
Jutut2: 5 : undefined struct.html:83:5
Henkilot2: 5 : Kalle Kehveli struct.html:85:5
Jutut1: 6 : Just one struct.html:80:5
Jutut2: 6 : undefined struct.html:83:5
Henkilot2: 6 : Lammi Tohtonen struct.html:85:5
Jutut1: 7 : undefined struct.html:80:5
Jutut2: 7 : undefined struct.html:83:5
Henkilot2: 7 : undefined struct.html:85:5
{1: Object, 2: Object, 3: Object, 4: Object, 5: Object, 6: Object, 7: Object}
 struct.html:108
{1: Object, 2: Object, 3: Object, 4: Object, 5: Object, 6: Object, 7: Object}
 struct.html:122
{1: Object, 2: Object, 3: Object, 4: Object, 5: Object, 6: Object, 7: Object}
 struct.html:145
1 Nimi : Tommi Lahtonen Osoite : Valtatie 20 Postinumero : 00000 Puhelin : +358050508254 Data : 72,45,38,39,38,23,47,14,50,28 struct.html:166:5
2 Nimi : Kalle Kehveli Osoite : Kotikatu 14 Postinumero : 00000 Puhelin : +358050301296 Data : 73,24,91,57,61,11,95,66,8,85 struct.html:166:5
3 Nimi : Maija Virtanen Osoite : Viitatie 10 Postinumero : 00000 Puhelin : +358044900791 Data : 35,46,4,61,18,17,23,16,50,38 struct.html:166:5
4 Nimi : Matti Virtanen Osoite : Keskuskatu 20 Postinumero : 00000 Puhelin : +358040539830 Data : 59,83,69,61,55,15,66,71,61,46 struct.html:166:5
5 Nimi : Ville Kehveli Osoite : Koivukuja 11 Postinumero : 00000 Puhelin : +358040220837 Data : 17,81,96,24,52,66,77,64,14,45 struct.html:166:5
6 Nimi : Kalle Kehveli Osoite : Keskuskatu 9 Postinumero : 00000 Puhelin : +358044940487 Data : 19,25,38,96,58,13,10,72,51,64 struct.html:166:5
7 Nimi : null Osoite : Viitatie 18 Postinumero : 00000 Puhelin : +358044394905 Data : 88,68,26,81,33,51,72,38,24,77 struct.html:166:5
{"1":"Tommi Lahtonen","2":"Kalle Kehveli","3":"Maija Virtanen","4":"Matti Virtanen","5":"Ville Kehveli","6":"Kalle Kehveli","7":null} struct.html:169:1
{"tunniste1":"Lammi Tohtonen","tunniste2":"Nalle Kehveli","tunniste3":"Miia Virtanen","tunniste4":"Ville Virtanen","tunniste5":"Kalle Kehveli","tunniste6":"Lammi Tohtonen"} struct.html:170:1
{"1":["Nalle","Lego","Pipo"],"2":["Lusikka","Veitsi","Haarukka","Spork"],"3":[33,44,55,66,77,88],"4":[1,2,3,"Lusikka","Nalle","Pipo",100],"5":[],"6":["Just one"]} struct.html:171:1
[{"1":"foo","2":"bar","3":"foobar"},{"10":"foo","11":"bar","13":"foobar"},{"1":"foo","2":"bar","3":"foobar"},{"10":1,"11":2,"13":3}] struct.html:172:1
{"1":{"Nimi":"Tommi Lahtonen","Osoite":"Unknown","Postinumero":"00000","Puhelin":"+358000000","Data":[1,2,3,4,5,6,7,8,9,10]},"2":{"Nimi":"Kalle Kehveli","Osoite":"Unknown","Postinumero":"00000","Puhelin":"+358000000","Data":[1,2,3,4,5,6,7,8,9,10]},"3":{"Nimi":"Maija Virtanen","Osoite":"Unknown","Postinumero":"00000","Puhelin":"+358000000","Data":[1,2,3,4,5,6,7,8,9,10]},"4":{"Nimi":"Matti Virtanen","Osoite":"Unknown","Postinumero":"00000","Puhelin":"+358000000","Data":[1,2,3,4,5,6,7,8,9,10]},"5":{"Nimi":"Ville Kehveli","Osoite":"Unknown","Postinumero":"00000","Puhelin":"+358000000","Data":[1,2,3,4,5,6,7,8,9,10]},"6":{"Nimi":"Kalle Kehveli","Osoite":"Unknown","Postinumero":"00000","Puhelin":"+358000000","Data":[1,2,3,4,5,6,7,8,9,10]},"7":{"Nimi":null,"Osoite":"Unknown","Postinumero":"00000","Puhelin":"+358000000","Data":[1,2,3,4,5,6,7,8,9,10]}} struct.html:173:1
{"1":{"Nimi":"Tommi Lahtonen","Osoite":"Unknown","Postinumero":"00000","Puhelin":"+358000000","Data":[1,2,3,4,5,6,7,8,9,10]},"2":{"Nimi":"Kalle Kehveli","Osoite":"Unknown","Postinumero":"00000","Puhelin":"+358000000","Data":[1,2,3,4,5,6,7,8,9,10]},"3":{"Nimi":"Maija Virtanen","Osoite":"Unknown","Postinumero":"00000","Puhelin":"+358000000","Data":[1,2,3,4,5,6,7,8,9,10]},"4":{"Nimi":"Matti Virtanen","Osoite":"Unknown","Postinumero":"00000","Puhelin":"+358000000","Data":[1,2,3,4,5,6,7,8,9,10]},"5":{"Nimi":"Ville Kehveli","Osoite":"Unknown","Postinumero":"00000","Puhelin":"+358000000","Data":[1,2,3,4,5,6,7,8,9,10]},"6":{"Nimi":"Kalle Kehveli","Osoite":"Unknown","Postinumero":"00000","Puhelin":"+358000000","Data":[1,2,3,4,5,6,7,8,9,10]},"7":{"Nimi":null,"Osoite":"Unknown","Postinumero":"00000","Puhelin":"+358000000","Data":[1,2,3,4,5,6,7,8,9,10]}} struct.html:174:1
{"1":{"Nimi":"Tommi Lahtonen","Osoite":"Valtatie 20","Postinumero":"00000","Puhelin":"+358050508254","Data":[72,45,38,39,38,23,47,14,50,28]},"2":{"Nimi":"Kalle Kehveli","Osoite":"Kotikatu 14","Postinumero":"00000","Puhelin":"+358050301296","Data":[73,24,91,57,61,11,95,66,8,85]},"3":{"Nimi":"Maija Virtanen","Osoite":"Viitatie 10","Postinumero":"00000","Puhelin":"+358044900791","Data":[35,46,4,61,18,17,23,16,50,38]},"4":{"Nimi":"Matti Virtanen","Osoite":"Keskuskatu 20","Postinumero":"00000","Puhelin":"+358040539830","Data":[59,83,69,61,55,15,66,71,61,46]},"5":{"Nimi":"Ville Kehveli","Osoite":"Koivukuja 11","Postinumero":"00000","Puhelin":"+358040220837","Data":[17,81,96,24,52,66,77,64,14,45]},"6":{"Nimi":"Kalle Kehveli","Osoite":"Keskuskatu 9","Postinumero":"00000","Puhelin":"+358044940487","Data":[19,25,38,96,58,13,10,72,51,64]},"7":{"Nimi":null,"Osoite":"Viitatie 18","Postinumero":"00000","Puhelin":"+358044394905","Data":[88,68,26,81,33,51,72,38,24,77]}} struct.html:175:1
Use of Mutation Events is deprecated. Use MutationObserver instead. 1352.user.js:105:0