Удаление уровней во вложенных объектах в JavaScript - PullRequest
1 голос
/ 11 апреля 2020

API REST, который я использую, возвращает этот формат данных:

const documents = [
  {
    "fields": {
      "title": {
        "stringValue": "77"
      },
      "difficulty": {
        "doubleValue": 77
      },
    },
    "createTime": "2020-04-10T15:13:47.074204Z"
  },
  {
    "fields": {
      "title": {
        "stringValue": "99"
      },
      "difficulty": {
        "doubleValue": 99
      },
    },
    "createTime": "2020-04-10T15:13:47.074204Z"
  }
]

Мне нужен этот формат:

{
  title: "77",
  difficulty: 77
},
{
  title: "99",
  difficulty: 99
}

Это означает, что я должен не только группировать эти данные, но и полностью удалите два слоя посередине. Как мне это сделать?

В качестве бонуса: как мне стать лучше в этом? Есть ли хорошие ресурсы?

Ответы [ 3 ]

2 голосов
/ 11 апреля 2020

Используя .map() и деструктурируя следующим образом:

const documents = [{ "fields": { "title": { "stringValue": "77" }, "difficulty": { "doubleValue": 77 }, }, "createTime": "2020-04-10T15:13:47.074204Z", }, { "fields": { "title": { "stringValue": "99" }, "difficulty": { "doubleValue": 99 }, }, "createTime": "2020-04-10T15:13:47.074204Z" } ];

const result = documents.map(({fields}) => ({title: fields.title.stringValue, difficulty: fields.difficulty.doubleValue}));

console.log(result);

Надеюсь, это поможет!

1 голос
/ 11 апреля 2020

Вам придется перебирать данные и выбирать поля. Описательный способ сделать это - использовать функцию map(), доступную для массивов.

const documents = [
  {
    "fields": {
      "title": {
        "stringValue": "77"
      },
      "difficulty": {
        "doubleValue": 77
      },
    },
    "createTime": "2020-04-10T15:13:47.074204Z"
  },
  {
    "fields": {
      "title": {
        "stringValue": "99"
      },
      "difficulty": {
        "doubleValue": 99
      },
    },
    "createTime": "2020-04-10T15:13:47.074204Z"
  }
]

let result = documents.map(document => ({
  title: document.fields.title.stringValue,
  difficulty: document.fields.difficulty.doubleValue
}));

console.log(result);
1 голос
/ 11 апреля 2020

Вы можете использовать Array#map метод и Object.values метод для достижения результата.

const documents = [{
    "fields": {
      "title": {
        "stringValue": "77"
      },
      "difficulty": {
        "doubleValue": 77
      },
    },
    "createTime": "2020-04-10T15:13:47.074204Z"
  },
  {
    "fields": {
      "title": {
        "stringValue": "99"
      },
      "difficulty": {
        "doubleValue": 99
      },
    },
    "createTime": "2020-04-10T15:13:47.074204Z"
  }
]

const result = documents.map(({
  fields: {
    title: t,
    difficulty: d
  }
}) => ({
  title: Object.values(t)[0],
  difficulty: Object.values(d)[0]
}));

console.log(result);
...