У меня есть объект, как показано ниже:
{
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];
});
Я хочу новый объект.
Ваш первый «объект» вообще не является допустимым объектом. Вместо ключа вы даете ему ссылку на массив.
@obscure На самом деле это то, как анализируется URL-адрес. Я использую vue-router, и этот объект является частью параметров маршрута.
И это именно то, что вы получаете обратно? Не просто два массива?
Есть один способ получить то, что мне нужно. и с другой страницы, когда я связываю ее, я получаю вышеупомянутый бесполезный объект из-за некоторого способа создания маршрута php. немного сложно объяснить :-(
Если вы попытаетесь зарегистрировать temp1, каков будет ваш результат? Потому что, как сказал @obscure, ключ недействителен, поэтому я не могу понять, как возвращаемый объект может быть таким, как тот, который вы написали.
Добавил картинку в доказательство.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете взять ключ и часть индекса ключа, а затем получить массив разделенного значения нового свойства, присвоить значение и присоединиться к массиву к новому свойству.
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);Большое вам спасибо за ваше время. это решает мою половину проблемы. Что делать, если объект уже находится в желаемом состоянии?
вы можете взять этот объект вместо пустого объекта в качестве начального значения для reduce. пожалуйста, добавьте пример.
Я надеюсь, что последнее изменение может быть полезным :-). Вы спрашивали о таком поведении, я прав? @Pradeepb
Спасибо @FedericoGalfione. Я сам так делал :-)
Вы можете использовать уменьшать и расколоть
Здесь идея
[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)Спасибо за подробное объяснение :-)
вам нужен новый объект или ссылка на тот же объект? пожалуйста, добавьте свою попытку.