Можно ли в javascript собирать массив в зависимости от его содержимого? - PullRequest
0 голосов
/ 27 января 2019

У меня есть данные формы, которые захватили видео, фото, аудио и текстовые данные. Количество этих полей является динамическим, поэтому у меня может быть несколько видео, аудио полей и т. Д., И это приводит к сбою или замедлению формы при отправке. В настоящее время я делаю отправку с помощью обычной формы действия отправки без ajax.

Я хочу пересмотреть поведение, чтобы я мог отправлять поля формы по одному запросу за раз, и я мог отображать прогресс на стороне клиента примерно так:

Basic information has been saved.
Audio 1 uploaded.
Video 2 uploaded.
Video 3 currently uploading ...
Video 4 pending.
Audio 5 pending.

Вот как выглядят данные формы, когда я запускаю form.serializeArray()

0: {name: "utf8", value: "✓"}
1: {name: "authenticity_token", value: "token data here"}
2: {name: "data[name]", value: "a"}
3: {name: "response[100]", value: "data:video/webm;base64,...."}
4: {name: "response[101]", value: "text data here"}
5: {name: "privacy_policy", value: "1"}

Теперь я хочу разделить этот массив для отдельного запроса формы Ajax, например, ff:

Запрос 1 - Основная информация

0: {name: "utf8", value: "✓"}
1: {name: "authenticity_token", value: "token data here"}
2: {name: "data[name]", value: "a"}

Запрос 2 - Видеоданные

0: {name: "utf8", value: "✓"}
1: {name: "authenticity_token", value: "token data here"}
2: {name: "response[100]", value: "data:video/webm;base64,...."}

Запрос 3 - Текстовые данные

0: {name: "utf8", value: "✓"}
1: {name: "authenticity_token", value: "token data here"}
2: {name: "response[101]", value: "text data here"}

Теперь я хочу знать, есть ли встроенный способ в javascript для достижения этого способа измельчения массива. Что-то вроде basic_info = formdata.remove(name, 'response').

Или нет? И мне нужно сделать это вручную, проходя через этот массив?

Спасибо

1 Ответ

0 голосов
/ 27 января 2019

Сначала удалите объекты, которые вы хотите представить в каждом массиве, а затем .map, чтобы создать новый массив, причем каждый новый элемент массива представляет собой подмассив, содержащий эти объекты плюс элемент, который повторяется:

const input = [
  {name: "utf8", value: "✓"},
  {name: "authenticity_token", value: "token data here"},
  {name: "data[name]", value: "a"},
  {name: "response[100]", value: "data:video/webm;base64,...."},
  {name: "response[101]", value: "text data here"},
  {name: "privacy_policy", value: "1"}
];
const [item1, item2, ...rest] = input;
const output = rest.map(item3 => [item1, item2, item3]);
console.log(output);

Если вы не хотите privacy_policy, просто pop() это сначала input.

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