Map() возвращает пары значений с объектом

У меня есть объект, как на картинке ниже.

Map() возвращает пары значений с объектом

Я хочу использовать 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).

Есть ли ошибка, которую я делаю, и какие-либо корректировки, которые вы можете предложить?

или другим способом можно получить объект, который я хочу?

Спасибо.

не могли бы вы сделать jsfiddle для этого?

Amar Singh 20.07.2019 12:43
{obj[x].number:{'pg':obj[x].pg,'pt':obj[x].pt}} это недопустимый синтаксис JS
Clarity 20.07.2019 12:44

Кажется, вам не хватает двоеточия (":") здесь: "2643216"{pg:1,pt:1} - непосредственно перед "{". Вы исправили это?

Almir Campos 20.07.2019 12:46

Спасибо всем, кто мне помог.

Hsinhsin Hung 20.07.2019 14:58
Поведение ключевого слова "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
4
64
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Для динамического ключа в объекте 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.

Hsinhsin Hung 20.07.2019 12:48

[obj[x].number] не может использоваться. Возможно, это недопустимый синтаксис.

Hsinhsin Hung 20.07.2019 13:22
Ответ принят как подходящий

это должно сделать работу:

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()?

Amar Singh 20.07.2019 12:46
map не может возвращать значение вроде: { "2643216"{pg:1,pt:1}, "1304681":{pg:1,pt:1} }
Hitmands 20.07.2019 12:47

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