Как динамически преобразовать массив вложенных объектов в один массив - PullRequest
0 голосов
/ 12 марта 2020

// У меня есть этот вид нескольких объектов

_id: "5e5d00337c5e6a0444d00304"
    orderID: 10355
    orderDate: "2020-03-02"
    user:
       _id: "5e2e9699a648c53154f41025"
       name: "xyz1"
       email: "abcde@gmail.com"
       mNumber: 12336

// и я хочу это в одном массиве

orderID: 10354, 10355
orderDate:"2020-03-02","2020-03-02"
name: "xyz", "xyz1"
email: "abcd@gmail.com", "abcde@gmail.com"
mNumber: 1234536, 12336

Моя главная цель - получить лист Excel, где под этими заголовками идентификаторы электронной почты и так далее, я получаю эти данные. как

orderID    orderDate    name   email           mNumber
10354      2020-03-02   xyz   abcd@gmail.com   1234536
10355      2020-03-02   xyz1   abcde@gmail.com   12336

Как это сделать в Angular?

1 Ответ

1 голос
/ 12 марта 2020

Если я вас правильно понимаю, вы можете сделать что-то вроде этого,

objs = [
  {
    _id: "5e5d00337c5e6a0444d00304",
    orderID: 10354,
    orderDate: "2020-03-02",
    user:
    {
      _id: "5e2e9699a648c53154f41025",
      name: "xyz",
      email: "abcd@gmail.com",
      mNumber: 1234536
    }
  },
  {
    _id: "5e5d00337c5e6a0444d00304",
    orderID: 10355,
    orderDate: "2020-03-02",
    user:
    {
      _id: "5e2e9699a648c53154f41025",
      name: "xyz1",
      email: "abcde@gmail.com",
      mNumber: 12336
    }
  }
];
const arr = [];
for (const o of objs) {
  arr.push([
    o.orderID,
    o.orderDate,
    o.user.name,
    o.user.email,
    o.user.mNumber
  ]);
}
console.log(arr);

Это вывод,

[ [ 10354, '2020-03-02', 'xyz', 'abcd@gmail.com', 1234536 ],
  [ 10355, '2020-03-02', 'xyz1', 'abcde@gmail.com', 12336 ] ]

По сути, это просто итерация.

Я собираюсь добавить другое решение. В этом случае вы не хотите описывать все значения, которые идут в строке, но вместо этого вы хотите описать значения, которые вы не хотите в строке. Вы можете использовать рекурсивную функцию для обхода объектов в этой ситуации. fields - это объект, в котором вы описываете, какие значения идут, а какие нет. Примерно так.

const fields = { _id: false, user: { _id: false} }
function toRowRec(obj, fields) {
  let row = [];
  const keys = Object.keys(obj);
  for (const k of keys) {
    if (!fields.hasOwnProperty(k)) {
      row.push(obj[k]);
    } else if (typeof obj[k] === 'object' && obj[k] !== null) {
      row = row.concat(toRowRec(obj[k], fields[k])); 
    }
  }
  return row;
}
let arr = []
for (const o of objs) {
  arr.push(toRowRec(o, fields));
}
console.log(arr);

Я опускаю ввод objs (такой же, как и предыдущий), и вы получите точный вывод, чем раньше.

Вы увидите, что я тоже опускаю ключи, которые я хочу поместить в строку, для этого я просто проверяю, находится ли ключ в объекте fields.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...