Filtrar una matriz de JavaScript de objeto otra matriz JavaScript de objetos

Neil Merton:

Tengo la siguiente matriz de JavaScript maquillada de objetos:

const permissions = [
  {
    moduleEnabled: true,
    moduleId: 1,
    moduleName: 'Directory'
  },
  {
    moduleEnabled: true,
    moduleId: 2,
    moduleName: 'Time off'
  },
  {
    moduleEnabled: false,
    moduleId: 3,
    moduleName: 'Tasks'
  },
  {
    moduleEnabled: false,
    moduleId: 4,
    moduleName: 'Documents'
  }
]

También tengo la siguiente matriz de objetos basados ​​en una colección de widgets que están disponibles para que se muestre:

const widgets = [
  {
    id: 1,
    moduleId: 2,
    title: 'Your time off'
  },
  {
    id: 2,
    moduleId: 1,
    title: 'Your colleagues'
  },
  {
    id: 3,
    moduleId: 3,
    title: 'Your tasks'
  },
  {
    id: 4,
    moduleId: 5,
    title: 'Your sales pipeline'
  },
  {
    id: 5,
    moduleId: 4,
    title: 'Your documents'
  },
  {
    id: 6,
    moduleId: 6,
    title: 'Your legal cases'
  }
]

Lo que me gustaría hacer es reducir la matriz de objetos widgetsa un nuevo conjunto de objetos filteredWidgetssobre la base de los valores de la permissionsmatriz de objetos, siendo estos si el moduleIdse encuentra, y también donde el moduleEnabledes true.

He probado el código de abajo, pero no está funcionando:

const filteredWidgets = []
for (const permission in permissions) {
  const found = widgets.filter((item) => item.moduleId === permission.moduleId && permission.moduleEnabled)
  if (found) {
    filteredWidgets.push(found)
  }
}
console.log('filteredWidgets\n', filteredWidgets)

Cualquier ayuda será apreciada. Gracias por adelantado.

Editar: incluye salida esperada:

const filteredWidgets = [
  {
    id: 1,
    moduleId: 2,
    title: 'Your time off'
  },
  {
    id: 2,
    moduleId: 1,
    title: 'Your colleagues'
  }
]
Mike D Sutton:

En su función de filtro, comprobar si existe algún permiso que coincide con los criterios siguientes:

const filteredWidgets = widgets.filter(widget =>
    permissions.find(permission =>
        (permission.moduleId === widget.moduleId) && permission.moduleEnabled));

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=303379&siteId=1
Recomendado
Clasificación