다음과 같은 일부 자동차에 대한 정보를 포함하는 객체 배열이 있다고 가정합니다.
const arr = [ { "group":[], "name": "All Makes", "code": "" }, { "group":["Group A"], "name": "BMW", "code": "X821" }, { "group":["Group B"], "name": "Audi", "code": "B216" }, { "group":["Group B"], "name": "Ford", "code": "P385" }, { "group":["Group B", "Group C"], "name": "Mercedes", "code": "H801" }, { "group":["Group C"], "name": "Honda", "code": "C213" } ];
우리는 그러한 객체 배열 중 하나를 취하는 JavaScript 함수를 작성해야 합니다. 함수는 각 개체의 그룹 속성을 기반으로 이 배열의 개체를 그룹화해야 합니다. 그룹 속성에 둘 이상의 요소가 포함된 경우 해당 개체는 두 그룹에 모두 나타나야 합니다.
따라서.] 위의 배열에 대해 출력은 다음과 같아야 합니다. -
const output = [ { "group": "Group A", "cars": [ { name: "BMW", code: "X821" } ] }, { "group": "Group B", "cars": [ { name: "Audi", code: "B216" }, { name: "Ford", code: "P385" }, { name: "Mercedes", code: "H801" } ] }, { "group": "Group C", "cars": [ { name: "Mercedes", code: "H801" }, { name: "Honda", code: "C213" } ] } ];
예시
이에 대한 코드는 -
const arr = [ { "group":[], "name": "All Makes", "code": "" }, { "group":["Group A"], "name": "BMW", "code": "X821" }, { "group":["Group B"], "name": "Audi", "code": "B216" }, { "group":["Group B"], "name": "Ford", "code": "P385" }, { "group":["Group B", "Group C"], "name": "Mercedes", "code": "H801" }, { "group":["Group C"], "name": "Honda", "code": "C213" } ]; const groupTogether = (arr = []) => { let res = [] res = Object.entries(arr.reduce((acc, { group, ...r }) => { group.forEach(key => acc[key] = (acc[key] || []).concat({...r})); return acc; }, {})) return res.map(([group, arr]) => ({ group, arr })); }; console.log(JSON.stringify(groupTogether(arr), undefined, 4));
출력
콘솔의 출력은 -
[ { "group": "Group A", "arr": [ { "name": "BMW", "code": "X821" } ] }, { "group": "Group B", "arr": [ { "name": "Audi", "code": "B216" }, { "name": "Ford", "code": "P385" }, { "name": "Mercedes", "code": "H801" } ] }, { "group": "Group C", "arr": [ { "name": "Mercedes", "code": "H801" }, { "name": "Honda", "code": "C213" } ] } ]