2017-12-03 6 views
1

안녕하세요, 나는 객체의 배열을 결합하고 최종 결과가 attr 중 하나와 다른 하나는 모든 값을 가진 배열로 개체의 배열로 노력하고있어속성으로 객체의 배열을 결합

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

을 내가 예상 한 결과는 다음과 같습니다 : 원래

배열에서 두 번째로 ATTR에서 내가 가진

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

이 작업은 여러 가지 방법으로 수행 할 수 있습니다. 한 가지 가능한 방법은 몇 가지 기능 마술

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

에 감사드립니다. @ncardeli 서버에 대한 코드와 응답의 예가 나와 있습니다. 그 해결책은 제가 찾고있는 해결책입니다. – ezekkiel

+0

도와 주시겠습니까? 그리고 Stack Overflow를 환영합니다. 이 답변 또는 다른 사람이 문제를 해결 한 경우이를 수락 한 것으로 표시하십시오. – ncardeli