Zapier - сопоставлять и группировать входные данные в Javascript - PullRequest
0 голосов
/ 18 мая 2018

Заранее извиняюсь за предыдущий пост .@xavdid отлично помогли мне.Из-за недостатка опыта и знаний в этой области я не смог точно выразить, что мне нужно.Я считаю, что у меня сейчас достаточно информации, чтобы выразить то, чего я хочу достичь.Поэтому я сделаю все возможное, чтобы выразить это здесь.

Вот моя входная информация, ключи и значения.Каждая позиция клавиш соответствует позиции значений.

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

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

Под предопределенными ключами я имею в виду возврат только этих 7 ключей: "Сведения о проекте, Название проекта, Дополнения, Обновление, Количество слов, Тип книги, Загрузите ваш файл сюда " с их значениями (игнорируйте другие ключи)

Пример 3 книг:

Ключи входных данных: Project Details,Project Title,Addons,Upgrade,Word Count,Ebook Type,_builder_info,_builder_id,_master_builder,Upload your file here,_builder_id,_master_builder,_builder_id,_builder_info,Ebook Type,Word Count,Upgrade,Addons,Project Title,Project Details,Project Details,Project Title,Addons,Upgrade,Word Count,Ebook Type,_builder_info,_builder_id,_master_builder,Upload your file here,_builder_id

Значения входных данных: Book Description 3,Book Title 3,Book Cover Design - $59.00,No Package,Standard 10K - $270.00,Standard Ebook,Start~~//www.shappify-cdn.com/images/282516/127828454/001_Ebook Standard 325x325.png~~start,start1526659928051,1,https://cdn.shopify.com/s/files/1/0012/8814/2906/uploads/778dfc3dbdf278441776e9f5dd763910.png,start1526659928051,1,start1526659872230,Start~~//www.shappify-cdn.com/images/282516/127828455/001_Ebook Technical 325x325 (1).png~~start,Technical Ebook,Technical 15K - $450.00,No Package,No Addons,Book Title 2,Book Description 2,Book 1 Description,Book 1 Title,No Addons,Essential Package - $79.00,Standard 20K - $540.00,Standard Ebook,Start~~//www.shappify-cdn.com/images/282516/127828458/001_Ebook Standard 20k 325x325.png~~start,start1526659838425,1,https://cdn.shopify.com/s/files/1/0012/8814/2906/uploads/c09635c2e003fd8779a19651e36f4315.png,start1526659838425

Требуемый вывод:

[{'Ebook Type': 'Standard Ebook'},{'Ebook Type':'Technical Ebook'},{'Ebook Type':'Standard Ebook'}], [{'Word Count': 'Standard 10K - $270.00'}, {'Word Count': 'Technical 15K - $450.00'},{'Word Count': 'Standard 20K - $540.00'}] [{Upgrade: 'No Package'},{Upgrade: 'No Package'},{Upgrade: 'Essential Package - $79.00'}] [{Project Title: 'Book Title 3'}, {Project Title: 'Book Title 2'}, {Project Title: 'Book Title 1'}] [{'Project Details': 'Book Description 3'},{'Project Details': 'Book Description 2'},{'Project Details':'Book 1 Description'}], [{'Addons: 'Book Cover Design - $59.00',{Addons:'No Addons'},{Addons:'No Addons'}], [{'Upload your file here':'https://cdn.shopify.com/s/files/1/0012/8814/2906/uploads/778dfc3dbdf278441776e9f5dd763910.png'},{'Upload your file here':https://cdn.shopify.com/s/files/1/0012/8814/2906/uploads/c09635c2e003fd8779a19651e36f4315.png'}]

Большое спасибо

1 Ответ

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

Хорошо!Поэтому я думаю, что у меня есть то, что мы хотим.Большие проблемы связаны с предположениями, которые мы делаем относительно структуры данных, а именно:

  • в значениях никогда не бывает запятых (книга под названием «Убийство, которое она написала» обанкротится из-заразделение запятыми)
  • ключи могут быть в любом порядке относительно друг друга (может делать любое количество заголовков перед описаниями), но заголовок 3 всегда будет (где-то) перед заголовком 2

Учитывая это, нам нужно разделить наши входные данные, разделить их на 7 требуемых ключей, а затем построить книги из этих массивов.Это следующее:

const keys = inputData.keys.split(',')
const values = inputData.values.split(',')
const keysWeWant = "Project Details,Project Title,Addons,Upgrade,Word Count,Ebook Type,Upload your file here".split(',')

let orderedValues = {}
// fill arrays so we can blindly push
keysWeWant.forEach(k => orderedValues[k] = [])

keys.forEach((key, index) => {
  if (keysWeWant.includes(key)) {
    orderedValues[key].push(values[index])
  }
})

console.log(orderedValues)

// have to cut up books now
// don't know how many we have, hopefully our values have the right number of items
// .map(Object) is because of this: https://stackoverflow.com/questions/35578478/array-prototype-fill-with-object-passes-reference-and-not-new-instance
let result = Array(orderedValues['Project Title'].length)
  .fill()
  .map(Object)

for (const keyWeWant in orderedValues) {
  orderedValues[keyWeWant].forEach((val, index) => {
    result[index][keyWeWant] = val
  })
}

// put book 1 first, this can be removed
result.reverse()
return result

вы можете увидеть это в действии здесь .Стоит отметить, что в примерах данных было только два «загрузить свой файл сюда», поэтому в последней книге (книга 1) этот ключ отсутствует.

Кроме того, когда вы проверяете это в редакторе zap, это будет выглядеть так, как будто возвращается только 1 элемент.Это только для теста .Он будет работать нормально, когда он реально работает (все после шага кода будет запускаться один раз для каждого элемента в возвращаемом массиве).

...