Ассоциативный массив Flashcards

1
Q

Ассоциативный массив

A

Ассоциативный массив - объект (организационная структура)
Массив, когда храним много однотипных данных, так как есть методы + свойства (length)
Примитивам не нужна копия
let user = {
name: “Elizabeth”,
age: 25,
address: {
city: {
title: “Minsk”
}
}
}

user.address.city.title или user[“address”][“city”][“title”]
“Minsk”

Создание свойств:
let city = {}
city.title = “Minsk” или city[“citizenCount”] =100
city
{title:”Minsk”, citizenCount:100}

Можно доставать метод или свойство из массива.
let users = [‘Dimych’, ‘Natasha’, ‘Valera’, ‘Katya’]
users“map”
[‘Dimych’, ‘Natasha’, ‘Valera’, ‘Katya’] -все с большой буквы будет.

Для объекта:

Создаем новое свойство для объекта.
let userObj = {
‘0’ : ‘Dimych’,
‘1’: ‘Natasha’,
‘2’:’Valera’,
‘3’:’Katya’
}
userObj [‘table’] = ‘brown’

let userObj = {
‘0’ : ‘Dimych’,
‘1’: ‘Natasha’,
‘2’:’Valera’,
‘3’:’Katya’
‘table’: ‘brown’ - новое
}
Поэтому св-во, которое мы хотим найти указываем объект[‘св-во’]
userObj [‘table’]

Что именно лежит в самом объекте?
Object.keys(userObj) - ключи
[“0”, “1”, “2”, “3”, “table”]

Object.values(userObj) - значения
[‘Dimych’, ‘Natasha’, ‘Valera’, ‘Katya’, ‘brown’]

Для собеседования:
Во что превратиться число внутри
userObj[12] - в строку
userObj[null] - в строку и появится, как текст
users [ {} ] = ‘hello’
Вызывается не явный метод toString(), а если метод toString() не распределен обычно возвращает [object Object]
Тут появится ключ с значением [object Object]

userObj [{name: ‘dimych’}]
‘hello’

но если перераспределю метод toString()
userObj [{name: ‘dimych’, toString() {return ‘blalalal’}}] = ‘value of blabla’
{0: “Dimych”, 1: “Natasha”, 2: “Valera”, 3: “Katya”, [object Object]: “hello”, blalalal: ‘value of blabla’}
Если бы не задали значение ‘value of blabla’ - то было бы undefined.

Самый быстрый вариант для того, чтобы достать элемент:
users[1]

export const users = {
‘101’: {id: 101, name: ‘Eliza’},
‘312323’: {id: 312323, name: ‘Nick’},
‘2321’: {id: 2321, name: ‘Vlad’},
‘1’: {id: 101, name: ‘Viktor’},
}

// users[1]

export const usersArr = [
{id: 101, name: ‘Eliza’},
{id: 312323, name: ‘Nick’},
{id: 2321, name: ‘Vlad’},
{id: 101, name: ‘Viktor’},
]

// usersArr.findIndex()
usersArr.find(u => u.id === 1)

type UsersType = {
[key: string] - вычисляемое св-во объекта и всегда будет строкой : {id: number, name: string} - превращает все в строку
}

//объекты в ассоциативном массиве

export const users: UsersType = {
‘101’: {id: 101, name: ‘Eliza’},
‘312323’: {id: 312323, name: ‘Nick’},
‘2321’: {id: 2321, name: ‘Vlad’},
‘1’: {id: 101, name: ‘Viktor’},
}

let user = {id: 100500, name: ‘Igor’}

//users[1]
users[user.id] = user;
delete users[user.id];
users[user.id].name = ‘Vitya’

//объекты в обычном массиве

export const usersArr = [
{id: 101, name: ‘Eliza’},
{id: 312323, name: ‘Nick’},
{id: 2321, name: ‘Vlad’},
{id: 101, name: ‘Viktor’},
]

// usersArr.findIndex()
usersArr.find(u => u.id === 1)
// let usersCopy = […usersArr.filter(), user] - фильтровать надо, чтобы не добавить дубликат
// let users = usersArr.filter(u => u.id !== user.id)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly