オブジェクトのJavaScriptの配列にオブジェクトの別のJavaScriptの配列をフィルタリング

ニール・マートン:

私は、次のオブジェクト作らアップJavaScriptの配列を持っています:

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'
  }
]

私も表示されるように利用可能であるウィジェットのコレクションに基づいてオブジェクトの次の配列を持っています:

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'
  }
]

私は何をしたいのですが、オブジェクトの配列を減少させることにあるwidgetsオブジェクトの新しい配列へfilteredWidgetsの値に基づいてpermissionsオブジェクトの配列、これらいるかどうかmoduleId発見され、また、どこmoduleEnabledですtrue

私は以下のコードを試してみたが、それは働いていません。

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)

すべてのヘルプは大歓迎されます。前もって感謝します。

編集:予想される出力が含まれています。

const filteredWidgets = [
  {
    id: 1,
    moduleId: 2,
    title: 'Your time off'
  },
  {
    id: 2,
    moduleId: 1,
    title: 'Your colleagues'
  }
]
マイク・Dサットン:

あなたのフィルタ機能では、与えられた基準に一致するすべての許可をチェックします。

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

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=303376&siteId=1