ES6: реструктуризация объекта для mailchimp api - PullRequest
0 голосов
/ 06 марта 2019

Я хочу построить базу объектов на массиве и другом объекте.

Цель - отправить на mailchimp api мои интересы, для этого у меня есть:

//Array of skills for one user    
const skillsUser1 = ["SKILL1", "SKILL3"]

//List of all my skills match to mailchimp interest group
const skillsMailchimpId = {
  'SKILL1': 'list_id_1',
  'SKILL2': 'list_id_2',
  'SKILL3': 'list_id_3',
}

//Mapping of user skill to all skills
const outputSkills = skillsUser1.map((skill) => skillsMailchimpId[skill]);
console.log(outputSkills);

Проблема в том, что outputSkill выдает мне массив:

["ID1", "ID3"]

Но что нужно mailchimp api , и что мне нужно::

{ "list_id_1": true,
  "list_id_2": false, //or empty
  "list_id_3" : true
}

1 Ответ

0 голосов
/ 06 марта 2019

Простой способ будет таким (см. Комментарии в коде для объяснения):

// Array of skills for one user    
const skillsUser1 = ["SKILL1", "SKILL3"]

// List of all my skills match to mailchimp interest group
const skillsMailchimpId = {
  'SKILL1': 'list_id_1',
  'SKILL2': 'list_id_2',
  'SKILL3': 'list_id_3',
}

// Create an output object
const outputSkills = {};

// Use `Object.entries` to transform `skillsMailchimpId` to array
Object.entries(skillsMailchimpId)
  // Use `.forEach` to add properties to `outputSkills`
  .forEach(keyValuePair => {
    const [key, val] = keyValuePair;
    outputSkills[val] = skillsUser1.includes(key);
  });

console.log(outputSkills);

Основная идея состоит в том, чтобы зацикливаться на skillsMailchimpId вместо skillsUser.

Но это не очень динамично.Для вашего производственного кода вы, вероятно, захотите сделать его более гибким.

// Array of skills for one user    
const skillsUser1 = ["SKILL1", "SKILL3"]

// List of all my skills match to mailchimp interest group
const skillsMailchimpId = {
  'SKILL1': 'list_id_1',
  'SKILL2': 'list_id_2',
  'SKILL3': 'list_id_3',
}

// Use `Object.entries` to transform `skillsMailchimpId` to array
const skillsMailchimpIdEntries = Object.entries(skillsMailchimpId);

const parseUserSkills = userSkills => {
  // Create an output object
  const outputSkills = {};
  
  // Use `.forEach` to add properties to `outputSkills`
  skillsMailchimpIdEntries.forEach(([key, val]) => {
    outputSkills[val] = userSkills.includes(key);
  });
  
  return outputSkills;
}

// Now you can use the function with any user
console.log(parseUserSkills(skillsUser1));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...