Извлечь массив значений ключей из JSON - PullRequest
0 голосов
/ 10 июня 2018

Как я могу сгенерировать массив определенной пары ключ-значение из вложенного объекта JS?Есть ли функция lodash для таких вещей?

Исходные данные

{
  "data": {
    "allLecturesJson": {
      "edges": [
        {
          "node": {
            "index": 1,
            "date": "01/02/2018",
            "presenter": "Mary",
          }
        },
        {
          "node": {
            "index": 2,
            "date": "01/03/2018",
            "presenter": "Jack",
          }
        },
  }
}

Ожидаемый результат

[
  {
    "index": 1,
    "date": "01/02/2018",
    "presenter": "Mary",
  },
  {
    "index": 2,
    "date": "01/03/2018",
    "presenter": "Jack"
  }
]

Ответы [ 4 ]

0 голосов
/ 10 июня 2018

Этого можно добиться с помощью одной строки кода, используя метод Array.map() с выражением функции Arrow.

Демо

var jsonObj = {
  "data": {
    "allLecturesJson": {
      "edges": [
        {
          "node": {
            "index": 1,
            "date": "01/02/2018",
            "presenter": "Mary",
          }
        },
        {
          "node": {
            "index": 2,
            "date": "01/03/2018",
            "presenter": "Jack",
          }
        }
      ]
    }
  }
};

var res = jsonObj.data.allLecturesJson.edges.map(obj => obj.node);

console.log(res);
0 голосов
/ 10 июня 2018
jsonData.data.allLecturesJson.edges.map(e => e.node)

Это должно сработать.

0 голосов
/ 10 июня 2018

Мы можем использовать Array.prototype.reduce () для достижения необходимой структуры данных.Не нужно использовать lodash:)

Вот функция, которая преобразует структуру:

const input = {
  "data": {
    "allLecturesJson": {
      "edges": [
        {
          "node": {
            "index": 1,
            "date": "01/02/2018",
            "presenter": "Mary",
          }
        },
        {
          "node": {
            "index": 2,
            "date": "01/03/2018",
            "presenter": "Jack",
          }
        }]
  }
}};

const output = input.data.allLecturesJson.edges.reduce((accumulator, currVal) => {
  return [...accumulator, currVal.node];
}, []);
0 голосов
/ 10 июня 2018

Прежде всего, ваши данные плохо отформатированы.Вы должны отформатировать его в действительный объект.

Метод map() создает новый массив с результатами вызова предоставленной функции для каждого элемента в вызывающем массиве.

Попробуйте следующий способ с Array.prototype.map():

var jsonData = {
  "data": {
    "allLecturesJson": {
      "edges": [
        {
          "node": {
            "index": 1,
            "date": "01/02/2018",
            "presenter": "Mary",
          }
        },
        {
          "node": {
            "index": 2,
            "date": "01/03/2018",
            "presenter": "Jack",
          }
        }
      ]
    }
  }
}

var resArr = jsonData.data.allLecturesJson.edges.map(i => i.node);
console.log(resArr);
...