Преобразование объекта в объединенный объект по желанию

У меня есть объект, как показано ниже:

{
   departments[0]: "Pricing",
   departments[1]: "Technology",
   locations[0]: "Berlin",
} 

Я хочу преобразовать его в

{
    departments: "Pricing, Technology",
    locations: "Berlin"
}

Также он должен сохранять то же самое, если объект уже находится в желаемом состоянии.

Любая помощь будет оценена по достоинству. Я не могу обдумать это.

Я пытаюсь что-то вроде ниже:

let tempkey= '';
Object.keys(temp1).forEach(key => {
    if (key.indexOf('[') !== -1) {
        tempkey = // then do substring and remove last three characters
    }
  let value = temp1[key];

});

Преобразование объекта в объединенный объект по желанию

вам нужен новый объект или ссылка на тот же объект? пожалуйста, добавьте свою попытку.

Nina Scholz 25.03.2019 16:53

Я хочу новый объект.

Pradeepb 25.03.2019 16:54

Ваш первый «объект» вообще не является допустимым объектом. Вместо ключа вы даете ему ссылку на массив.

obscure 25.03.2019 16:55

@obscure На самом деле это то, как анализируется URL-адрес. Я использую vue-router, и этот объект является частью параметров маршрута.

Pradeepb 25.03.2019 16:56

И это именно то, что вы получаете обратно? Не просто два массива?

obscure 25.03.2019 16:58

Есть один способ получить то, что мне нужно. и с другой страницы, когда я связываю ее, я получаю вышеупомянутый бесполезный объект из-за некоторого способа создания маршрута php. немного сложно объяснить :-(

Pradeepb 25.03.2019 17:00

Если вы попытаетесь зарегистрировать temp1, каков будет ваш результат? Потому что, как сказал @obscure, ключ недействителен, поэтому я не могу понять, как возвращаемый объект может быть таким, как тот, который вы написали.

Federico Galfione 25.03.2019 17:01

Добавил картинку в доказательство.

Pradeepb 25.03.2019 17:04
Поведение ключевого слова "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) для оценки ваших знаний,...
1
8
53
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

var object = { 'departments[0]': "Pricing", 'departments[1]': "Technology", 'locations[0]': "Berlin", "state": "York" },
    result = Object.entries(object).reduce((o, [k, v]) => {
        var match = k.match(/([^\[]+)\[([^\]]+)\]/);
        if (match){
            var [key, index] = match.slice(1),
            temp = (o[key] || '').split(', ');          
            temp[index] = v;
            o[key] = temp.join(', ');            
            return o;
        } else {
            o[k] = v;
            return o;
        };
    }, {});

console.info(result);

Большое вам спасибо за ваше время. это решает мою половину проблемы. Что делать, если объект уже находится в желаемом состоянии?

Pradeepb 25.03.2019 17:08

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

Nina Scholz 25.03.2019 17:10

Я надеюсь, что последнее изменение может быть полезным :-). Вы спрашивали о таком поведении, я прав? @Pradeepb

Federico Galfione 25.03.2019 17:35

Спасибо @FedericoGalfione. Я сам так делал :-)

Pradeepb 26.03.2019 07:29

Вы можете использовать уменьшать и расколоть

Здесь идея

  • Записи объекта для получения ключа/значения от объекта.
  • Теперь используйте разделение для каждого ключа, чтобы получить значение до первого [
  • Добавьте значение к объекту op на основе ключа, если op[key] пусто, мы не добавляем , перед значением, иначе мы добавляем , перед значением, чтобы получить желаемый результат.

let obj = {
   'departments[0]': "Pricing",
   'departments[1]': "Technology",
   'locations[0]': "Berlin",
} 

let op = Object.entries(obj).reduce((op,[key,value])=>{
  key = key.split('[',1)
  op[key] = op[key] || ''
  op[key] += op[key] ? `, ${value}` : value
  return op
},{})

console.info(op)

Спасибо за подробное объяснение :-)

Pradeepb 26.03.2019 07:28

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