Files
freeCodeCamp/curriculum/challenges/portuguese/02-javascript-algorithms-and-data-structures/basic-javascript/manipulating-complex-objects.md

4.1 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:

var ourMusic = [
  {
    "artist": "Daft Punk",
    "title": "Homework",
    "release_year": 1997,
    "formats": [ 
      "CD", 
      "Cassette", 
      "LP"
    ],
    "gold": true
  }
];

Isto é um array o qual contém um objeto dentro dele. O objeto possui vários pedaços de metadados sobre um album. Também possui um array aninhado formats. Se você quiser adicionar mais discos de album, você pode fazer isso ao adicionar os discos no 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. Notação de Objeto JavaScript ou JSON é um formato, de interalteração 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 for o último objeto no array.

--instructions--

Adicione um novo álbum para o array myMusic. Adicione strings: artist e title, 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')})

Seu objeto em myMusic deve ter pelo menos 4 propriedades

myMusic.forEach(object => {assert(Object.keys(object).length > 3); });

Seu objeto em myMusic deve conter a propriedade artist a qual é uma string

myMusic.forEach(object => {
  assert.containsAllKeys(object, ['artist']);
  assert.typeOf(object.artist, 'string')
})

Seu objeto em myMusic deve conter a propriedade title a qual é uma string

myMusic.forEach(object => {
  assert.containsAllKeys(object, ['title']);
  assert.typeOf(object.title, 'string')
})

Seu objeto em myMusic deve conter a propriedade release_year a qual é um número

myMusic.forEach(object => {
  assert.containsAllKeys(object, ['release_year']);
  assert.typeOf(object.release_year, 'number')
})

Seu objeto em myMusic deve conter a propriedade formats a qual é 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--

var myMusic = [
  {
    "artist": "Billy Joel",
    "title": "Piano Man",
    "release_year": 1973,
    "formats": [
      "CD",
      "8T",
      "LP"
    ],
    "gold": true
  }
];

--solutions--

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