Files
2021-10-27 21:47:35 +05:30

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",
  ]
  }
];