# Array i JavaScript
*
author: krm
created: 2018-09-27
status: alpha
*

# 👁️‍🗨️ Om Array i JS

För att programmera på ett effektivt sätt behöver du ha någon form av 
datastruktur som motsvara en lista.

  * JS har listor som en integrerad del av språket.
  * Här tala vi om listor som väden och vanliga metoder som används.


# ❓ Vad är Arrayer?

Array är en lista av värden. Värden kan vara av vilken typ som helst.

  * En lista defineras på fölajnde sätt:
  
```js
 let my_list = [1,"b",true];
```

  * Vi kna ha listor i listor också.

```js
 let my_list = [1,"b",true];
```

# 📣 Några kommentar om Arrayer

En array är av typen objekt. array är en under typ till object.

  * Så allt du kan göra med objekt kan du också göra med en Array.
  * typeof av en Array kommer vara "object".
  * Du bör försöka att undviak att använda en Array som ett Object.

# 🚜 Vad kan vi använder Arrayer till?

Listor kan användas för att hantera data på många olika sätt.

  * Det finns två vanliga sätt att använda en Array:er på:
    * Som en kö, först in blir också först ut.
    * Som en stack, dvs hög, Sist in blir först ut.

# 🀄️ Finns Arrayer i andra språk?

Alla språk har stöd för någon typ av Array, men syntaxen kan vara 
betydligt krångligare. Anledningen är att Array är en rätt så 
ineffektiva datastruktur och om du hanterar minnet mer så kan du 
försöka använda något mer effektivt.

  * I C och C++ föredrar man inte dynamsika listor som också kallas 
  Array.
  * I Python hanteras array på ungefär samma sätt som i JS.
  * PHP har också arrayer men dessa beter sig mer som objekt i JS.

# Att sätta in ett värde i en Array

Ett värde kan tilldelas genom att använda "=" och en hård parantes.

  * Exempel: *let a=[1,2]* - *a[2]=3* -*a[0]="hello"

# Att få ett värde ifrån en Array

Ett värde kan fås genom att helt enkel skriva indexdu behöver innan för hårda paranteser.

  * Exempel: *a[2]*
  * Exempel: *a[2] + a[3]*


# 🔄 Att konvertera till och från en Array

För att  konvertera till ett Array

  * Number([]) //0 Tips: Detta kna ge upphov till många förvirande 
  saker.

# 🔬 Är detta en Array?

Det går inte att bara använda "typeof" eftersom Array också är ett 
objekt.

  * Använd metoden *Array.isArray(array)*, *array* är metoden du vill 
  undersöka. 
  * Exempel: *Array.isArray([])* - *Array.isArray({})* - 
  *Array.isArray(true)* 
  * På riktig gammal webbläsare fungerar inte det, men det är inget 
  problem för oss. 
  
Ett annat förslag är något liknade *[] instanceof Array*, men denna 
metod har tyvärr en del problem som du  märker om du testar med *{} 
instanceof Array*. 

# Push

Du kan lägga till ett värde sist i en Array genom att använd metoden 
*push*.

```js
let arr=["a", "b"];
arr.push("c");
console.log(arr);
// ["a","b","c"]
```

# Shift

Du kan lägga till ett värde först i en Array genom att använd metoden 
*shift*.

```js
let arr=[1, 2];
arr.shift(0);
console.log(arr);
// [0,1,2]
```

# Pop

Du kan ta bort sista värdet och returnera det genmom att använda 
metoden "pop".

```js
let arr=["a","b","c"];
let c = arr.pop();
console.log(arr);
// ["a","b"]
console.log(c);
// c
```

# Unshift

Du kan ta bort sista värdet och returnera det genmom att använda 
metoden "shift".

```js
let arr=[0, 1, 2];
let zero = arr.unshift();
console.log(arr);
// [1,2]
console.log(zero);
// 0
```

# slice

Slice är en metod som retrnerar en del av en Array. Den tar två 
parameter:  

  * En start index där den nya array börjar. 
  * Ett slut index, den nya arrayen slutar innan det indexet.
  * Den ursprungliga arrayen ändras inte alls.

```js
let arr = ["a", "b", "c", "d"];
let short_arr = arr.slice(1,3);
console.log(short_arr);
// ["b", "c"]
```

# splice

Splice är en metod som tar bort element i en array, den kan också lägga till värden på en valfritt index. Den har två eller fler parametrar.
  * En start index där element ska tas bort eller läggas till ifrån.
  * En längd som avgör hur många element som ska tas bort.
  * Ett antal parametrar som kommer adderas.
  * Det är den array som anropar slice som kommer förändras.

```js
let arr = ["a", "q", "d"];
arr.splice(1,1,"b","c");
console.log(arr);
// ["a", "b", "c", "d"]
```

# length

Är kanske den alla vanligase använda egenskaper hos en array.

  * Ger helt enkelt längden på en array
  * Används ofta i *for* satser.
  
```javascript
let arr = ["a", "b", "c"];

for(let i = 0; i < arr.length; i++) {
  console.log(i+": "+arr[i]);
} 
```

# for-of

En bättre forsatts om du arbetar med arrayer.

  * Du ska använda *for-of*, inte *for-in* eller någon anna variant. 

```javascript
let arr = ["a", "b", "c"];

for(const letter of arr) {
  console.log(letter);
}
```

# join
