# Arrays

Arrays, também conhecidos como vetores, são estruturas que armazenam dados de maneira sequencial. Além disso, seus elementos são indexados. Sua grande utilidade é armazenar, em uma única variável, uma série de elementos.&#x20;

### Declaração

Em javascript, arrays são **dinâmicos.** Não é necessário alocar memória previamente, ou re-alocar memória para inserir ou deletar elementos. Para declarar um array, basta utilizar `[]`

```javascript
let elements = []
```

Também é possível inicializar um array com dados:

```javascript
let elements = ['a', 3, 85, 'maria']
```

Outra propriedade interessante dos arrays em javascript é a sua capacidade de armazenar elementos de diferentes tipos. É possível ter números e strings em um mesmo array. Além disso, arrays são indexados a partir do número 0.&#x20;

### Acessando elementos via index

É possível acessar o **i**ésimo elemento de um array por meio de seu índice `[i]`.

```javascript
let my_array = ['b', 'c']
let first_element = my_array[0]

console.log(first_element)
// Imprime 'b'
```

### Acessando elementos via valor

O operador `indexOf` permite encontrar a primeira ocorrência de um valor em um array, retornando -1 caso não haja ocorrência.&#x20;

```javascript
let my_array = ['a', 'b', 'c', 'd']
c_index = my_array.indexOf('c')

console.log(c_index)
// Imprime 2
```

### Modificando elementos via index

Ao contrário das Strings, **arrays são mutáveis em Javascript**. Isso significa que é possível acessar e modificar seus elementos.&#x20;

```javascript
let my_array = ['b', 'c']
my_array[1] = 'k'

console.log(my_array)
// Imprime ['b', 'k']
```

### Inserindo elementos

É possível inserir elementos em um array utilizando:

* `push`: Insere no **final**
* `unshift`: Insere no **início**

```javascript
let my_array = ['b', 'c']

my_array.push('z')
my_array.unshift('a')

console.log(my_array)

// Imprime ["a", "b", "c", "Z"]
```

### Propriedade "length"

Retorna o tamanho do array.&#x20;

```javascript
let my_array = ['a', 'b', 'c']
console.log(my_array.length)
// Imprime 3
```

### Removendo elementos

É possível remover elementos utilizando:

* `pop`: Remove o **último elemento** e o retorna

```javascript
let my_array = ['a', 'b', 'c']
my_array.pop()

console.log(my_array) // Imprime ['a', 'b']
```

* `shift`: Remove o **primeiro elemento** e o retorna

```javascript
let my_array = ['a', 'b', 'c']
my_array.shift()

console.log(my_array)
// Imprime ['b', 'c']
```

### Gerando sub-arrays

O operador `slice(start, end)` corta o array a partir de um índice inicial e final.&#x20;

```javascript
let my_array = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
sub_array = my_array.slice(2, 5)

console.log(sub_array)
// Imprime ["c", "d", "e"]
```

É importante relembrar que arrays são indexados a partir do 0.

Além disso, `slice` inclui o elemento `start`, mas não o `end`. No exemplo acima, `my_array[2] ("c")`, é incluído, mas`my_array[5] ("f")`, não.&#x20;

### Iterando sobre arrays

Uma das maiores utilidades do comando `for` é iterar sobre arrays. É possível utilizar o tamanho do array, `my_array.length`, para isto:&#x20;

```javascript
let my_array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

for (let i = 0; i < my_array.length; i++) {
    my_array[i] = my_array[i]**2    
}

console.log(my_array)
// Imprime [0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144]
```

Entretanto, como é uma tarefa muito comum **iterar sobre arrays e manipular o elemento atual da iteração**, foi criado um método para isto, o `for(elem of array),`porém, diferente do anterior, o elemento original não permanece no array original, tendo que criar um array auxiliar para mostrar o resultado:&#x20;

```javascript
let my_array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
let new_array = []

for (number of my_array){
    new_array.push(number**2)
}

console.log(new_array)
```

Importante notar que essa maneira de iterar sobre  vários elementos não é uma exclusividade da definição do array, além de existir algumas outra maneiras de iterar sobre um array (como a função map).


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://uclsanca.gitbook.io/learn/web-basico/javascript/arrays.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
