Каков краткий способ выравнивания вложенного объекта? - PullRequest
0 голосов
/ 14 сентября 2018

Например, включите это:

const enums = { ip: 'ip', er: 'er' };

const obj = {
  somethingNotNeeded: {...},
  er: [
    { a: 1},
    { b: 2}
  ],
  somethingElseNotNeeded: {...},
  ip: [
    { a: 1},
    { b: 2}
  ]
}

В это:

[
  { a: 1},
  { b: 2},
  { a: 1},
  { b: 2}
]

Я уже делаю это окольным путем, объявляя объект перечисления типов, которые я хочу(er, ip), затем выполняем цикл forEach (lodash) для obj, проверяя, нет ли ключей в enum, и удаляем их из исходного obj.Затем, имея только те объекты, которые мне нужны, я делаю два вложенных цикла forEach, объединяющих результаты с новым объектом, используя растяжение остальных объектов ...

Я почти полностью уверен, что есть лучший способ сделать это, но я нене думаю об этом сегодня.

Ответы [ 3 ]

0 голосов
/ 14 сентября 2018

Поскольку вы не используете key из enums в конечном выводе, мы могли бы просто использовать Array вместо объекта.

const enums = ['ip', 'er'];

const obj = {
  somethingNotNeeded: {},
  er: [
    { a: 1 },
    { b: 2 },
  ],
  somethingElseNotNeeded: {},
  ip: [
    { a: 1 },
    { b: 2 }
  ]
};

const result = enums.reduce((acl, curr) => acl.concat(obj[curr]), []);
console.log(result);  

Это должно сработать.

0 голосов
/ 14 сентября 2018

Получите enums свойства с Object.values() (или Object.keys(), если они всегда идентичны). Используйте Array.map() для итерации массива имен свойств и извлечения их значений из obj. Выровнять массив массивов путем распространения в Array.concat():

const enums = { ip: 'ip', er: 'er' };

const obj = {
  somethingNotNeeded: {},
  er: [
    { a: 1},
    { b: 2}
  ],
  somethingElseNotNeeded: {},
  ip: [
    { a: 1},
    { b: 2}
  ]
};

const result = [].concat(...Object.values(enums).map(p => obj[p]));

console.log(result);
0 голосов
/ 14 сентября 2018

const props = ['ip', 'er']; // An array of the properties you are interested in

const obj = {
  somethingNotNeeded: {},
  er: [
    { a: 1},
    { b: 2}
  ],
  somethingElseNotNeeded: {},
  ip: [
    { a: 1},
    { b: 2}
  ]
}

const flatten = (array) => array ? array.reduce((output, array) => [...output, ...array], []) : array; // Take an array of arrays and flatten it into a single array

const result = flatten(props.map(p => obj[p])); //Run the flattern over an array that has been created by mapping the property names

console.log(result)
...