Возврат новой формы массивов - javascript

Мои данные:

{
  "rows": [
    {
      "id": 3,
      "code": "airtel121",
      "position": "manager",
      "salary": "25000",
      "login": {
        "id": 4,
        "username": "sameer",
        "firstName": "Mohamed",
        "lastName": "Sameer",
        "code": "airtel121",
      }
    },
    {
      "id": 7,
      "code": "airtel121",
      "position": null,
      "salary": null,
      "login": {
        "id": 8,
        "username": "annamalai",
        "firstName": "Anna",
        "lastName": "malai",
        "code": "airtel121",
      }
    }
  ]
}

Мой ожидаемый результат:

{
  "rows": [
    {
      "id": 4,
      "username": "sameer",
      "firstName": "Mohamed",
      "lastName": "Sameer",
      "code": "airtel121",
      "staffs": [
        {
          "id": 3,
          "code": "airtel121",
          "position": "manager",
          "salary": "25000",
        }
      ]
    },
    {
      "id": 8,
      "username": "annamalai",
      "firstName": "Anna",
      "lastName": "malai",
      "code": "airtel121",
      "staffs": [
        {
          "id": 7,
          "code": "airtel121",
          "position": null",
          "salary": null",
        }
      ]
    }
  ]
}

Я пробовал, но получаю только первый объект, проверьте мою скрипку:

http://jsbin.com/qaqehakuwi/edit?js,output

Можно ли выполнить цикл с помощью цикла for или это можно сделать с помощью lodash?

Проверьте мою ссылку на jsbin для кода.

Я использую код ES6 в своем проекте, поэтому я использовал оператор распространения.

Разве вы уже не задавали этот вопрос здесь: stackoverflow.com/questions/52496180/…

OliverRadini 26.09.2018 17:14

да, но у меня проблема с зацикливанием объектов, поэтому я снова спрашиваю, это другая проблема.

Mohamed Sameer 26.09.2018 17:15

Я думаю, вам следует отменить последний ответ и посмотреть, сможете ли вы получить ответ.

OliverRadini 26.09.2018 17:16

Возможный дубликат Как поменять формат массивов? - javascript

dWinder 26.09.2018 17:35
Поведение ключевого слова "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
4
43
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Вы можете использовать map для создания массива rows нового объекта из массива rows старого:

let newObj = {
  rows: oldObj.rows.map(row => {                                     // map the rows of the old object into the rows of the new object
    let { login, ...rest } = row;                                    // for each object/row get the login object as 'login' and the rest of the props as 'rest'
    return { ...login, staffs: [rest] };                             // return a new object that has the props of 'login' and an additional prop 'staffs' which is an array containing 'rest'
  })
};

Пример:

let oldObj = {"rows":[{"id":3,"code":"airtel121","position":"manager","salary":"25000","login":{"id":4,"username":"sameer","firstName":"Mohamed","lastName":"Sameer","code":"airtel121"}},{"id":7,"code":"airtel121","position":null,"salary":null,"login":{"id":8,"username":"annamalai","firstName":"Anna","lastName":"malai","code":"airtel121"}}]};

let newObj = {
  rows: oldObj.rows.map(row => {
    let { login, ...rest } = row;
    return { ...login, staffs: [rest] };
  })
};

console.info(newObj);

остальное это ES6?

Mohamed Sameer 26.09.2018 17:43

@MohamedSameer Добро пожаловать! Кстати, первая строка - назначение деструктуризации объектов, и это функция ES6. Вторая строка - это распространять синтаксис по объектам, и это функция ES2018. Если вторая строка вызывает проблемы, вы можете использовать Object.assign, например: return Object.assign({}, login, { staffs: [rest] });.

ibrahim mahrir 26.09.2018 18:00

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