JavaScript добавляет json к существующему объекту

Я борюсь с добавлением JSON к существующим объектам с помощью Vue.js. Итак, у меня есть функция, которая вычисляет некоторые варианты, и на данный момент она работает хорошо, но мне нужно будет изменить их, чтобы передать правильные данные моему бэкэнду Laravel.

Вот так выглядит мой массив (этот массив используется для расчета вариантов)

"attributes":[
      {
         "title":{
            "text":"Size",
            "value":"1"
         },
         "values":[
            "Red",
            "Green"
         ]
      },
      {
         "title":{
            "text":"Color",
            "value":"2"
         },
         "values":[
            "X",
            "M"
         ]
      }
   ]

И я их рассчитываю так:

addVariant: function () {
            const parts = this.form.attributes.map(attribute => attribute.values);
            const combinations = parts.reduce((a, b) => a.reduce((r, v) => r.concat(b.map(w => [].concat(v, w))), []));
            
            this.form.variants = combinations;
        },

И результат выглядит так:

"variants":[
      [
         "Red",
         "X"
      ],
      [
         "Red",
         "M"
      ],
      [
         "Green",
         "X"
      ],
      [
         "Green",
         "M"
      ]
   ]

Итак, это хорошо рассчитано, но эти варианты должны выглядеть так:

"variants":[
        {
            "title": "Red/M",
            "slug": "prooooo",
            "options": [
                {
                    "key": "Color",
                    "value": "Red"
                },
                {
                    "key": "Size",
                    "value": "M"
                }
            ]
        },
        {
            "title": "Red/X",
            "slug": "prooooo",
            "options": [
                {
                    "key": "Color",
                    "value": "Red"
                },
                {
                    "key": "Size",
                    "value": "X"
                }
            ]
        }

Как видите, у меня есть поле заголовка, которое вычисляется с помощью options.values, но реальный вопрос заключается в том, как сделать так, чтобы этот JSON выглядел как последний заданный JSON.

Есть идеи, как это сделать?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
46
1

Ответы 1

Из того, что я вижу, недостающие значения для создания окончательного вывода - это свойства key массивов options, которые я вижу в первом массиве attributes под свойством text объекта title.

Первое изменение, которое вы можете сделать, это создание переменной parts: вместо того, чтобы возвращать attribute.values напрямую, map поверх них, чтобы также сохранить attribute.title.text.

В то же время мы устанавливаем ключи возвращаемого объекта, чтобы они соответствовали объекту options из желаемого вывода.

const parts = this.form.attributes.map((attribute) =>
  attribute.values.map((value) => {
    // `options` objects have `value` and `key` properties
    return { value, key: attribute.title.text };
  })
);

Код combinations остается прежним.

Затем мы перебираем combinations и создаем новый массив variants.

let variants = [];

for (const combination of combinations) {
  variants.push({
    // use template strings to create the new title
    title: `${combination[0].value}/${combination[1].value}`,
    slug: "...the value that you want",
    // the "combination" variable already has the structure that you want for "options"
    options: combination
  });
}

Окончательный код будет выглядеть примерно так:

addVariant: function () {
  const parts = this.form.attributes.map((attribute) =>
    attribute.values.map((value) => {
      return { value, key: attribute.title.text };
    })
  );

  const combinations = parts.reduce((a, b) =>
    a.reduce((r, v) => r.concat(b.map((w) => [].concat(v, w))), [])
  );

  let variants = [];

  for (const combination of combinations) {
    variants.push({
      title: `${combination[0].value}/${combination[1].value}`,
      slug: "...the value that you want",
      options: combination,
    });
  }

  this.variants = variants;
}

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

Rade Ilijev 31.03.2021 12:24

На самом деле value не является частью этой функции, поэтому кажется, что этот код работает не так, как ожидалось: / На самом деле он говорит, что Object (...) не является функцией

Rade Ilijev 31.03.2021 12:32

Вы можете указать мне строку, которая вызывает проблему? Он работал нормально, когда я тестировал код

Catalin Hoha 31.03.2021 12:41

На самом деле это после переменной вариантов, я попытался удалить функцию foreach и вернуть варианты с комбинациями const, и это работает, если foreach находится в коде, он не работает

Rade Ilijev 31.03.2021 12:43

Ой, теперь работает, наверное, из-за этого значения ... Большое спасибо !!!

Rade Ilijev 31.03.2021 12:51

Рад, что это сработало! Не забудьте отметить ответ как принятый, если он помог

Catalin Hoha 31.03.2021 13:00

Другие вопросы по теме