groupBy или разделение объекта с несколькими ключами с помощью lodash - PullRequest
0 голосов
/ 02 апреля 2020

У меня есть массив пакетов, так что каждый пакет имеет IP-адрес источника и IP-адрес назначения. Я хочу найти лучший способ разделить массив так, чтобы в конце я получил словарь, ключи которого - IP, а их значение - все пакеты, отправленные с или на этот IP.

Например, если это мой массив:

let packets = [ {sourceIp:127.0.0.1, destIp:127.0.0.2}, 
                {sourceIp:127.0.0.2, destIp:127.0.0.3},
                {sourceIp:127.0.0.3, destIp:127.0.0.1},
                {sourceIp:127.0.0.2, destIp:127.0.0.1}]

Я ищу способ получить -

result = { 127.0.0.1: [{sourceIp:127.0.0.1, destIp:127.0.0.2},{sourceIp:127.0.0.3, destIp:127.0.0.1},
                       {sourceIp:127.0.0.2, destIp:127.0.0.1}],
           127.0.0.2: [{sourceIp:127.0.0.1, destIp:127.0.0.2},{sourceIp:127.0.0.2, destIp:127.0.0.3},
                       {sourceIp:127.0.0.2, destIp:127.0.0.1}],
           127.0.0.3: [{sourceIp:127.0.0.2, destIp:127.0.0.3},{sourceIp:127.0.0.3, destIp:127.0.0.1}]
         }

Спасибо: -)

1 Ответ

0 голосов
/ 28 апреля 2020

Прежде всего json тип данных массива должен быть в строке.

Затем использовать loda sh в _. GroupBy ()

const packets = [{
    sourceIp: "127.0 .0 .1",
    destIp: "127.0 .0 .2"
  },
  {
    sourceIp: "127.0 .0 .2",
    destIp: "127.0 .0 .3"
  },
  {
    sourceIp: "127.0 .0 .3",
    destIp: "127.0 .0 .1"
  },
  {
    sourceIp: "127.0 .0 .2",
    destIp: "127.0 .0 .1"
  }
]
const splittedData = _.groupBy(packets, 'sourceIp');
console.clear();
console.log(splittedData);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script>
...