Форматирование массивов объектов в объекты (способ ES6)

#javascript #arrays #reactjs #json

#язык JavaScript #массивы #реагирует на #json

Вопрос:

Я пытаюсь создать красивые объекты массивов, но вместо этого появляется это.

 {  "label": [  "Instagram"  ],  "value": [  "@username"  ] }  

Итак, как я могу это изменить? Чего я хочу, так это быть таким

 {  "label": "instagram",  "value": "@username" },  

Я не знаю, как это произошло, но я предполагаю, что это было результатом того, что я использовал formik для определения начальных значений сложного вложенного массива из strapi. Я использовал array.map для отображения объектов. Поэтому, возможно, именно поэтому все было так грязно.

Так каково же решение этой проблемы? Форматирование массивов массивов в объекты? Слияние? Обращение? Я понятия не имею, как это называлось. Заранее спасибо всем, кто ответил на это.

(обновлено) Начальные значения:

 const formik = useFormik({ enableReinitialize: true, initialValues: {  name: vendor?.name || '',  description: vendor?.description || '',  company: {  social_media: [  {  label: vendor.company?.social_media.map((x) =gt; x.label) || '',  value: vendor.company?.social_media.map((x) =gt; x.value) || ''  }  ]  } },  

Комментарии:

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

2. В следующий раз ,пожалуйста, сначала попробуйте что-нибудь, иначе, похоже, вот мой вопрос, решите его за меня.

Ответ №1:

Вы можете использовать for..in и join метод массива

 const data = {  "label": [  "Instagram"  ],  "value": [  "@username"  ] };  for (let keys in data) {  data[keys] = data[keys].join(',')  };  console.log(data) 

Комментарии:

1. Большое вам спасибо, сэр, за ваш ответ, используя .join («), чтобы устранить проблему с беспорядочным массивом внутри массива, с которой я сталкивался раньше. Теперь у меня есть довольно много объектов, такими, какими я хотел быть.

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

Ответ №2:

Array.map возвращает массив, если вы не хотите, чтобы какой-либо объект использовал Array.foreach

Или

Используйте […Array.map()]

 label: [...vendor.company?.social_media.map((x) =gt; x.label)]   value: [...vendor.company?.social_media.map((x) =gt; x.value)   

Комментарии:

1. вы не можете использовать map с объектами

2. Но он упомянул, что использует .map, что делает его беспорядочным

3. Спасибо за ваш ответ, но я попробовал ваше решение, но оно не работает с начальными значениями Formik. Однако другое решение с использованием .join(«) решило мою проблему.