Фильтровать массив внутри массива - PullRequest
0 голосов
/ 11 сентября 2018

Я надеюсь, что вы можете помочь мне с этим ... Я использую AngularJS =>

перед отправкой запроса в MongoDB, я должен отфильтровать массив, все значения получены из модели ng,и он создается при отправке формы, но перед отправкой запроса мне нужно отфильтровать массив, чтобы я мог отбросить неопределенные значения. Структура следующая:

this.permision = [
    {
       title: 'Archivo',
       submenu: [this.menu.productCatalog, this.menu.providers]
    },
    {
       title: 'Usuarios',
       submenu: [this.menu.users, this.menu.roles]
    },
    {
        title: 'Presupuesto',
        submenu: [this.menu.invoiceLog, this.menu.requestLog, 
        this.menu.creditLog, this.menu.reportLog]
    },
    {
         title: 'Requerimientos',
         submenu: [this.menu.dps1f1, this.menu.catalog,
         this.menu.consolidate, this.menu.expenses,
         this.menu.purchaseGeneration, 
         this.menu.purchaseTracking,
         this.menu.circuits]
   },
   {
         title: 'Operaciones',
         submenu: [this.menu.account, this.menu.loadPay, 
         this.menu.accountStatus]
   },
   {
         title: 'Graficos',
         submenu: [this.menu.importFile]
   },
   {
         title: 'Cuenta Corriente',
         submenu: [this.menu.credit, this.menu.rates]
   },
];

Как получить доступ к массиву подменюи отфильтровать его перед отправкой запроса?

Это ответ, который я получаю, когда отправляю запрос:

{submenu:["DPS1F1", undefined, undefined, undefined, undefined, undefined, undefined] title : "Requerimientos"}

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

Array.filter(), похоже, не работает, и если я пытаюсь заставить indexOf() использовать Splice(), похоже, тоже не работает?Спасибо за вашу помощь.

Ответы [ 2 ]

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

Вы можете использовать underscorejs.

this.permision.map((e)=>{
   e.submenu = _.compact(e.submenu);
});

compact _.compact (list) Возвращает копию списка со всеми удаленными ложными значениями.В JavaScript ложь, ноль, 0, "", неопределенный и NaN - это ложь.

underscorejs

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

Вы можете использовать этот подход:

this.permision = this.permision.map(function(permision) {
  return {
    title: permission.title,
    submenu: permission.submenu.filter(Boolean)
  };
});

Для этого необходимо преобразовать каждую запись this.permision, используя Array.map , в объект с таким же названием, но разница в том, что он фильтрует ( Array.filter ) массив submenu. Предикатом функции фильтра является Boolean функция. По сути, каждый элемент массива submenu будет подвергнут принуждению / оценке, чтобы определить, является ли он истинным или ложным . Надеюсь, это поможет.

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