Как использовать lodash для удаления ключей из объекта JSON?

1

Я пытаюсь преобразовать некоторые данные с помощью lodash без успеха. Я действительно новичок в javascript и lodash. Как я могу получить ожидаемый результат? Я использовал mapValues и chain, но я ничего не добился.

const data = {
  "north": [
    {
      "2018-07-01": {
        "date": "2018-07-01",
        "name": "david",
        "age": 11
      },
      "2018-07-02": {
        "date": "2018-07-02",
        "name": "damo",
        "age": 16
      },
      "2018-07-03": {
        "date": "2018-07-03",
        "name": "dani",
        "age": 12
      }
    }
  ],
  "south": [
    {
      "2018-07-01": [
        {
          "fruit": "banana",
          "date": "2018-07-01",
          "name": "miller",
          "age": 11
        },
        {
          "fruit": "mango",
          "date": "2018-07-01",
          "name": "mano",
          "age": 11
        },
        {
          "fruit": "avocado",
          "date": "2018-07-01",
          "name": "karl",
          "age": 14
        }
      ],
      "2018-07-02": [
        {
          "fruit": "pineaplle",
          "date": "2018-07-02",
          "name": "gautier",
          "age": 12
        },
        {
          "fruit": "apple",
          "date": "2018-07-02",
          "name": "gauteng",
          "age": 9
        },
        {
          "fruit": "watermelon",
          "date": "2018-07-02",
          "name": "garzier",
          "age": 12
        }
      ]
    }
  ]
};

Ниже приведен ожидаемый результат. Я пытаюсь удалить даты, которые находятся за пределами объектов и массивов.

const expectedData = {
  "north": [
    {
      "date": "2018-07-01",
      "name": "david",
      "age": 11
    },
    {
      "date": "2018-07-02",
      "name": "damo",
      "age": 16
    },
    {
      "date": "2018-07-03",
      "name": "dani",
      "age": 12
    }
  ],
  "south": [
    {
      "fruit": "banana",
      "date": "2018-07-01",
      "name": "miller",
      "age": 11
    },
    {
      "fruit": "mango",
      "date": "2018-07-01",
      "name": "mano",
      "age": 11
    },
    {
      "fruit": "avocado",
      "date": "2018-07-01",
      "name": "karl",
      "age": 14
    },
    {
      "fruit": "pineaplle",
      "date": "2018-07-02",
      "name": "gautier",
      "age": 12
    },
    {
      "fruit": "apple",
      "date": "2018-07-02",
      "name": "gauteng",
      "age": 9
    },
    {
      "fruit": "watermelon",
      "date": "2018-07-02",
      "name": "garzier",
      "age": 12
    }
  ]
};
  • 0
    что ты уже испробовал? Требуется ли использование Lodash? (Это совсем не обязательно)
  • 0
    @CertainPerformance с использованием lodash не требуется.
Показать ещё 2 комментария
Теги:
lodash

3 ответа

0
Лучший ответ

Для этого вам не нужен lodash. Вы можете посмотреть каждый ключ в своих данных и просто вытащить значения из каждого элемента массива и объединить его в новый массив.

const data = {"north": [{"2018-07-01": {"date": "2018-07-01","name": "david","age": 11},"2018-07-02": {"date": "2018-07-02","name": "damo","age": 16},"2018-07-03": {"date": "2018-07-03","name": "dani","age": 12}}],"south": [{"2018-07-01": [{"fruit": "banana","date": "2018-07-01","name": "miller","age": 11},{"fruit": "mango","date": "2018-07-01","name": "mano","age": 11},{"fruit": "avocado","date": "2018-07-01","name": "karl","age": 14}],"2018-07-02": [{"fruit": "pineaplle","date": "2018-07-02","name": "gautier","age": 12},{"fruit": "apple","date": "2018-07-02","name": "gauteng","age": 9},{"fruit": "watermelon","date": "2018-07-02","name": "garzier","age": 12}]}]};

Object.keys(data).forEach(k => {
    data[k] = data[k].reduce((a, c) => a.concat(...Object.values(c)), [])
})
console.log(data)

Это начинается с каждого ключа в исходном объекте на north и на south. И для каждого из них заменяется массив накопленными значениями каждого объекта в этом массиве, игнорируя ключи.

0

Вы можете выполнять любые быстрые операции lodash, используя чистый JS-способ. Но, поскольку вы отметили lodash вот версия:

_.mapValues(data, v => _.flatMapDeep(v, _.values))

var data = {
  "north": [
    {
      "2018-07-01": {
        "date": "2018-07-01",
        "name": "david",
        "age": 11
      },
      "2018-07-02": {
        "date": "2018-07-02",
        "name": "damo",
        "age": 16
      },
      "2018-07-03": {
        "date": "2018-07-03",
        "name": "dani",
        "age": 12
      }
    }
  ],
  "south": [
    {
      "2018-07-01": [
        {
          "fruit": "banana",
          "date": "2018-07-01",
          "name": "miller",
          "age": 11
        },
        {
          "fruit": "mango",
          "date": "2018-07-01",
          "name": "mano",
          "age": 11
        },
        {
          "fruit": "avocado",
          "date": "2018-07-01",
          "name": "karl",
          "age": 14
        }
      ],
      "2018-07-02": [
        {
          "fruit": "pineaplle",
          "date": "2018-07-02",
          "name": "gautier",
          "age": 12
        },
        {
          "fruit": "apple",
          "date": "2018-07-02",
          "name": "gauteng",
          "age": 9
        },
        {
          "fruit": "watermelon",
          "date": "2018-07-02",
          "name": "garzier",
          "age": 12
        }
      ]
    }
  ]
};

var expectedData = _.mapValues(data, v => _.flatMapDeep(v, _.values));

console.log(expectedData);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>
0

вы можете просто сделать это

const expectedData = {
    north: Object.values(data.north[0]),
    south: Object.values(data.south[0])
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню