2017-12-03 6 views
1

こんにちは、私はオブジェクトの配列を結合しようとしていると、最終的な結果がattrのいずれかと他のすべての値を持つ配列のオブジェクトの配列になるようにする必要があります私が持っている本来のアトリビュートでオブジェクトの配列を結合する

配列の2番目のattrから:

let arr = [ 
    { 
     name: 'cdd_register', 
     levels: 'read' 
    }, { 
     name: 'cdd_register', 
     levels: 'write' 
    }, { 
     name: 'annual_reports', 
     levels: 'write' 
    } 
]; 

そして、私が期待した結果は次のとおりです。

let result = [ 
    { 
     name: 'cdd_register', 
     levels: ['read', 'write'] 
    }, { 
     name: 'annual_reports', 
     levels: 'write' 
    } 
]; 

は、私は、バックエンド

data: [{ 
    id:1 
    label: "Administrator" 
    name: "admin" 
    permissions:{ 
     data: [{ 
      id: 4, 
      name: "cdd_register.read", 
      label: "Read access on CDD Register module" 
     }, { 
      id: 6, 
      name: "cdd_register.write", 
      label: "Write access on CDD Register module" 
     }, { 
      id: 7, 
      name: "annual_reports.write", 
      label: "Write access on Annual Reports module" 
     }] 
    } 
}] 

からこのレスポンスを持っており、それは今だが、それを行うための最善の方法(クリーン)を把握カントとしてこの

getModules(roles) { 
    let modules = []; 

    _.forEach(roles, role => { 
     _.forEach(role.permissions.data, permission => { 
      modules.push(permission); 
     }) 
    }); 

    return _.uniqBy(modules, 'id').map(module => { 
     let moduleArray = module.name.split('.'); 
      return { 
       name: moduleArray[0], 
       levels: moduleArray[1] 
      } 
     }); 
    } 
} 

後、私は結果を持っています。

ありがとうございました。

+1

こんにちはを使用することができます。ようこそ。あなたが作業したコードを[mcve]の形式で質問に追加する必要があります。 – Andy

+0

申し訳ありませんが、@Andy – ezekkiel

答えて

0

これは、さまざまな方法で実行できます。 1つの可能な方法は、いくつかの機能の魔法

let arr = [{ 
 
    name: 'cdd_register', 
 
    levels: 'read' 
 
}, { 
 
    name: 'cdd_register', 
 
    levels: 'write' 
 
}, { 
 
    name: 'annual_reports', 
 
    levels: 'write' 
 
}]; 
 

 
let result = arr.reduce((acc, x) => { 
 
    const found = acc.find(y => (x.name == y.name)); 
 
    if (!found) { 
 
    acc.push({ 
 
     name: x.name, 
 
     levels: arr 
 
     .filter(y => (x.name == y.name)) 
 
     .map(z => (z.levels)) 
 
    }); 
 
    } 
 
    return acc; 
 
}, []) 
 

 
console.log(result)

+0

というサーバーのコードと応答の例が更新されました。これは、私が探していた解決策です。 – ezekkiel

+0

幸いです。この回答または他の誰かがあなたの問題を解決した場合は、それを合格とマークしてください。 – ncardeli

関連する問題