4.0 KiB
id, title, challengeType, videoUrl, forumTopicId, dashedName
id | title | challengeType | videoUrl | forumTopicId | dashedName |
---|---|---|---|---|---|
56533eb9ac21ba0edf2244cb | Manipular objetos complexos | 1 | https://scrimba.com/c/c9yNMfR | 18208 | manipulating-complex-objects |
--description--
Às vezes, você pode querer armazenar dados em uma Estrutura de Dados flexível. Um objeto JavaScript é uma forma de lidar com dados flexíveis. Eles permitem combinações arbitrárias de strings, numbers, booleans, arrays, functions e objects.
Aqui está um exemplo de estrutura de dados complexas:
const ourMusic = [
{
"artist": "Daft Punk",
"title": "Homework",
"release_year": 1997,
"formats": [
"CD",
"Cassette",
"LP"
],
"gold": true
}
];
Este é um array que contém um objeto dentro dele. O objeto possui vários pedaços de metadados sobre um álbum. Também possui um array aninhado formats
. Se você quiser adicionar mais álbuns, você pode fazer isso adicionando os discos ao array de alto nível. Objetos armazenam dados em uma propriedade, a qual possui um formato de chave-valor. No exemplo acima, "artist": "Daft Punk"
é uma propriedade que tem uma chave artist
e um valor de Daft Punk
. JavaScript Object Notation ou JSON
é um formato de intercâmbio de dados relacionados usado para armazenar dados.
{
"artist": "Daft Punk",
"title": "Homework",
"release_year": 1997,
"formats": [
"CD",
"Cassette",
"LP"
],
"gold": true
}
Observação: você precisará colocar uma vírgula após cada objeto no array, a não ser que ele seja o último objeto no array.
--instructions--
Adicione um novo álbum para o array myMusic
. Adicione as strings artist
e title
, o número release_year
e um array de strings formats
.
--hints--
myMusic
deve ser um array
assert(Array.isArray(myMusic));
myMusic
deve ter pelo menos dois elementos
assert(myMusic.length > 1);
Os elementos no array myMusic
devem ser objetos
myMusic.forEach(object => {assert.typeOf(object, 'object')})
O objeto em myMusic
deve ter pelo menos 4 propriedades
myMusic.forEach(object => {assert(Object.keys(object).length > 3); });
O objeto em myMusic
deve conter a propriedade artist
, do tipo string
myMusic.forEach(object => {
assert.containsAllKeys(object, ['artist']);
assert.typeOf(object.artist, 'string')
})
O objeto em myMusic
deve conter a propriedade title
, do tipo string
myMusic.forEach(object => {
assert.containsAllKeys(object, ['title']);
assert.typeOf(object.title, 'string')
})
O objeto em myMusic
deve conter a propriedade release_year
, do tipo number
myMusic.forEach(object => {
assert.containsAllKeys(object, ['release_year']);
assert.typeOf(object.release_year, 'number')
})
O objeto em myMusic
deve conter a propriedade formats
, que será um array
myMusic.forEach(object => {
assert.containsAllKeys(object, ['formats']);
assert.typeOf(object.formats, 'array')
})
formats
deve ser um array de strings com pelo menos dois elementos
myMusic.forEach(object => {
object.formats.forEach(format => {
assert.typeOf(format, 'string')
});
assert.isAtLeast(object.formats.length, 2)
})
--seed--
--after-user-code--
(function(x){ if (Array.isArray(x)) { return JSON.stringify(x); } return "myMusic is not an array"})(myMusic);
--seed-contents--
const myMusic = [
{
"artist": "Billy Joel",
"title": "Piano Man",
"release_year": 1973,
"formats": [
"CD",
"8T",
"LP"
],
"gold": true
}
];
--solutions--
const myMusic = [
{
"artist": "Billy Joel",
"title": "Piano Man",
"release_year": 1973,
"formats": [
"CS",
"8T",
"LP" ],
"gold": true
},
{
"artist": "ABBA",
"title": "Ring Ring",
"release_year": 1973,
"formats": [
"CS",
"8T",
"LP",
"CD",
]
}
];