Одноуровневые ключи плоских объектов, когда объект имеет объекты и массив объектов - PullRequest
0 голосов
/ 30 мая 2019

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

function flat(r, a) {
    var b = {};
    Object.keys(a).forEach(function (k) {
        if (k !== 'children') {
            b[k] = a[k];
        }
    });
    r.push(b);
    if (Array.isArray(a.children)) {
        b.children = a.children.map(function (a) { return a.name; });
        return a.children.reduce(flat, r);
    }
    return r;
}

Мой объект, который я хочу сгладить, таков:

payment: {
          keywords: [],
          userCategories: [
            {
              userCategory: 'CORPORATE',
              enabled: false
            },
            {
              userCategory: 'RETAIL',
              enabled: false
            }
          ],
          paymentDetailsType: 'DIAS',
          billPaymentModels: [
            {
              contractType: 'RI18',
              exists: false,
              contracts: [
                {
                  field: 'amount',
                  fieldType: 'amount',
                  name: [
                    {
                      localeLang: 'el',
                      value: 'ΠΟΣΟ'
                    },
                    {
                      localeLang: 'en',
                      value: 'AMOUNT'
                    }
                  ],
                  maxLength: 0,
                  index: 0,
                  editable: true
                },
                {
                  field: 'contract1',
                  fieldType: 'string',
                  isPaymentCode: true,
                  name: [
                    {
                      localeLang: 'el',
                      value: 'ΚΩΔΙΚΟΣ ΠΛΗΡΩΜΗΣ'
                    },
                    {
                      localeLang: 'en',
                      value: 'PAYMENT CODE'
                    }
                  ],
                  maxLength: 25,
                  index: 2
                },
                {
                  field: 'debtorName',
                  fieldType: 'string',
                  name: [
                    {
                      localeLang: 'el',
                      value: 'ΟΝΟΜΑΤΕΠΩΝΥΜΟ/ΕΠΩΝΥΜΙΑ ΥΠΟΧΡΕΟΥ'
                    },
                    {
                      localeLang: 'en',
                      value: 'DEBTOR NAME'
                    }
                  ],
                  maxLength: 70,
                  index: 3,
                  formats: [
                    {
                      type: 'FULLNAME'
                    }
                  ]
                }
              ],
              validations: [
                {
                  errorMessage: [
                    {
                      localeLang: 'el',
                      value: 'Υποχρεωτικό πεδίο'
                    },
                    {
                      localeLang: 'en',
                      value: 'Required field'
                    }
                  ],
                  validationType: 'REQUIRED',
                  parameters: {
                    field: 'contract1'
                  },
                  scope: 'FIELD'
                },
                {
                  errorMessage: [
                    {
                      localeLang: 'el',
                      value: 'Υποχρεωτικό πεδίο'
                    },
                    {
                      localeLang: 'en',
                      value: 'Required field'
                    }
                  ],
                  validationType: 'REQUIRED',
                  parameters: {
                    field: 'amount'
                  },
                  scope: 'FIELD'
                },
                {
                  errorMessage: [
                    {
                      localeLang: 'el',
                      value: 'Παρακαλώ εισάγετε έγκυρο Κωδικό Πληρωμής'
                    },
                    {
                      localeLang: 'en',
                      value: 'Please enter a valid Bank Payment Code'
                    }
                  ],
                  validationType: 'RI18',
                  scope: 'FIELD'
                }
              ]
            }
          ],
          channelAttributes: [
            {
              subChannel: null,
              active: true,
              name: [
                {
                  localeLang: 'el',
                  value: ''
                },
                {
                  localeLang: 'en',
                  value: ''
                }
              ]
            }
      ],
}

Проблема в том, что ключ должен быть таким: payment.billPaymentsModel [0].contracts [0] .name но выводом будет payment.billPaymentsModel.0.contracts.0.name

...