Рефакторинг массива JS в определенном формате, который ожидает серверная часть - PullRequest
0 голосов
/ 18 мая 2018

У меня есть этот массив, который возвращается, когда пользователь отправляет форму:

leaders: [
    {
        email: 'name@domain.io',
        sites: [
            {
                name: 'Test',
                sitemeta_id: 'xxxxxxxxx',
                _checked: true
            },
            {
                name: 'Test 2',
                sitemeta_id: 'xxxxxxxx',
                _checked: true
            }
        ],
        focused: false,
        _sitesChecked: 1
    },
    {
        email: 'dog@gmail.com',
        sites: [
            {
                name: 'Some Name',
                sitemeta_id: 'xxxxx',
                _checked: true
            },
            {
                name: 'Names',
                sitemeta_id: 'xxxxxxxx'
            }
        ],
        focused: false,
        _sitesChecked: 2
    }
]

Я хотел бы реорганизовать этот массив для отправки этого массива в определенном формате, который ожидает бэкэнд, который будет включать только сайтимена со значением _checked как true, поэтому сайт «Имена» не будет включен, например:

leaders: [
    {
        email: 'name@domain.io',
        sites: ['Test', 'Test2']
    },
    {
        email: 'dog@gmail.com',
        sites: ['Some Name']
    }
]

Какой лучший способ добиться этого в JS (или AngularJS)?

1 Ответ

0 голосов
/ 18 мая 2018

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

const leaders = [{email:'name@domain.io',sites:[{name:'Test',sitemeta_id:'xxxxxxxxx',_checked:!0},{name:'Test 2',sitemeta_id:'xxxxxxxx'}],focused:!1,_sitesChecked:1},{email:'dog@gmail.com',sites:[{name:'Some Name',sitemeta_id:'xxxxx',_checked:!0},{name:'Names',sitemeta_id:'xxxxxxxx',_checked:!0}],focused:!1,_sitesChecked:2}];

const output = leaders.map(
  ({ email, sites }) => ({
    email,
    sites: sites.reduce(
      (accum, { name, _checked }) => _checked ? [...accum, name] : accum,
      []
    )
  })
);
console.log(output);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...