Как добавить в массив в Postmates, а затем экспортировать? - PullRequest
0 голосов
/ 17 мая 2018

Допустим, у меня есть массив как переменная окружения на Почтальоне:

tags: ["11111111", "22222222", "33333333", "44444444"]

Затем я получу ответ этого тела в формате JSON от Почтальона:

{
"id": "12345678",
"tagging": {
   "tags": [
       {
         "id": "11111111"}]
}

Я хочу сравнить массив«тегирует» данные в тело JSON и записывает «id» в массив.

Как изменить массив так, чтобы он теперь выглядел примерно так:

tags: ["11111111":["12345678"], "22222222", "33333333", "44444444"]

Я бы сделалэто снова и снова, скажем, 10000 раз, а затем хотелось бы посчитать, сколько «идентификаторов» в каждом теге.

Я программист-любитель, поэтому, пожалуйста, потерпите меня, пока я изучаю жаргон.

1 Ответ

0 голосов
/ 17 мая 2018

Прежде чем мы сможем начать кодирование, нам нужно отсортировать нужный формат данных. Ваш пример содержит синтаксическую ошибку:

tags: ["11111111":["12345678"], "22222222", "33333333", "44444444"]

Вероятно, должно быть:

{ tags: [ { "11111111": ["12345678"] }, "22222222", "33333333", "44444444"] }

С исправленной синтаксической ошибкой мы можем захотеть изменить еще больше. Хотя javascript не будет жаловаться, tags теперь является array смешанных типов: он содержит объект ({ "11..": ["123..."] }) и строки ("222..", "333.."). Я бы сказал, что вы хотите изменить это на следующее:

{ 
  tags: {
    "11111111": [ "12345678" ],
    "22222222": [ ],
    "33333333": [ ]
  }
}

Мы превратили tags в объект, который хранит массив идентификаторов для каждого тега. Когда идентификаторов нет, массив пуст.

Чтобы инициализировать этот объект, мы перебираем массив тегов:

const tags = ["11111111", "22222222", "33333333", "44444444"];

const tagGroups = {};
tags.forEach(t => { tagGroups[t] = []; });

console.log(tagGroups);

Теперь, когда у вас настроены пустые группы, вы готовы просмотреть данные.

const tags = ["11111111", "22222222", "33333333", "44444444"];
const data = [{
  "id": "12345678",
  "tagging": {
    "tags": [{
      "id": "11111111"
    }]
  }
}];

const tagGroups = {};
tags.forEach(t => {
  tagGroups[t] = [];
});

data.forEach(d => {
  d.tagging.tags.forEach(tag => {
    tagGroups[tag.id].push(d.id);
  });
});

console.log(tagGroups);

Теперь вы можете проверить количество тегов, позвонив по номеру tagGroups[id].length. E.g.:

console.log(tagGroups["11111111"].length); // Logs `1`

Есть более короткие / другие способы написания этого кода, но я старался сделать его максимально читабельным.

Примечание: если ваш data содержит тег, которого нет в вашем массиве tags, код сломается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...