Guest User

Untitled

a guest
Aug 15th, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.92 KB | None | 0 0
  1. const arrayToSchema = keys =>
  2. keys.reduce((schema, _) => {
  3. if (_.indexOf('.') > -1) {
  4. const [key, rest] = _.split('.');
  5. schema[key] = {
  6. ...schema[key],
  7. ...arrayToSchema([rest])
  8. };
  9. } else {
  10. schema[_] = true;
  11. }
  12. return schema;
  13. }, {});
  14.  
  15. const pick = (obj, schema) =>
  16. Object.keys(obj).reduce((acc, key) => {
  17. if (!schema[key]) return acc;
  18.  
  19. if (Array.isArray(obj[key])) {
  20. acc[key] = obj[key].map(_ => pick(_, schema[key]));
  21. } else {
  22. acc[key] = obj[key];
  23. }
  24.  
  25. return acc;
  26. }, {});
  27.  
  28. const obj1 = {
  29. key1: 1,
  30. key2: 2,
  31. key3: 3
  32. };
  33.  
  34. const obj2 = {
  35. key1: 1,
  36. key2: 2,
  37. key3: [
  38. { key5: 5, key6: 6, key7: 7 },
  39. { key5: 8, key6: 9, key7: 10 },
  40. { key5: 11, key6: 12, key7: 13 }
  41. ],
  42. key4: 4
  43. };
  44.  
  45. console.log(pick(obj1, arrayToSchema(['key1', 'key3'])));
  46. console.log(
  47. pick(obj2, arrayToSchema(['key1', 'key3.key5', 'key3.key6', 'key4']))
  48. );
Add Comment
Please, Sign In to add comment