У меня есть объект, как на картинке ниже.
Я хочу использовать map() для получения объекта, например
{
"2643216":{pg:1,pt:1},
"1304681":{pg:1,pt:1}
}
Вот мой код.
Object.keys(obj).map(function(x){
return {obj[x].number:{'pg':obj[x].pg,'pt':obj[x].pt}}
})
Но могут появиться ошибки в obj[x].number.
Ошибки отладки уведомляют меня о незнании : (colon).
Есть ли ошибка, которую я делаю, и какие-либо корректировки, которые вы можете предложить?
или другим способом можно получить объект, который я хочу?
Спасибо.
{obj[x].number:{'pg':obj[x].pg,'pt':obj[x].pt}} это недопустимый синтаксис JS
Кажется, вам не хватает двоеточия (":") здесь: "2643216"{pg:1,pt:1} - непосредственно перед "{". Вы исправили это?
Спасибо всем, кто мне помог.



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


Для динамического ключа в объекте JavaScript вам нужны квадратные скобки, чтобы создать вычисляемое имя свойства:
return { [obj[x].number]: { "pg": obj[x].pg, "pt": obj[x].pt }}
И ваш код можно упростить, используя Object.values и неявный возврат стрелочной функции, а также деструктурирование и сокращенную нотацию свойств, например:
Object.values(obj).map(({ number, pg, pt }) => ({ [number]: { pg, pt }}))
Обратите внимание, что приведенное выше возвращает массив объектов - если вам нужен объект:
Object.values(obj).reduce((a, { number, pg, pt }) => ({ ...a, [number]: { pg, pt }}), {})
Поскольку я использую скрипт приложения Google, он предоставляет только Object.keys и не поддерживает Object.values.
[obj[x].number] не может использоваться. Возможно, это недопустимый синтаксис.
это должно сделать работу:
function groupByNumber(data) {
return Object
.keys(data)
.reduce(function(result, key) {
var value = data[key];
result[value.number] = { pt: value.pt, pg: value.pg };
return result;
}, {});
};
var data = {
'LKB_something': { number: 1, pg: 1, pt: 5 },
'LKB_something_else': { number: 2, pg: 1, pt: 5 },
'LKB_something_else_1': { number: 3, pg: 1, pt: 5 },
};
console.info('result', groupByNumber(data));// ES-NEXT would let you be more coincise
const groupByNumber = data => Object.values(data).reduce(
(result, { number, ...rest }) => ({ ...result, [number]: rest }),
{},
);
но объясните, почему НЕ использовать .map()?
map не может возвращать значение вроде: { "2643216"{pg:1,pt:1}, "1304681":{pg:1,pt:1} }
не могли бы вы сделать jsfiddle для этого?