다음과 같은 개체 배열이 있습니다.
[
{external_id: 1, items: [{k: 'v'}] },
{external_id: 2, items: [{k1: 'v1'}] },
{external_id: 1, items: [{k2: 'v2'}, {k3: 'v3'}] }
]
내가하고 싶은 것은 중첩 된 배열을 병합 external_id
하고 다음과 같은 '깨끗한 배열'을 반환하는 것입니다.
[
{external_id: 1, items: [{k: 'v'}, {k2: 'v2'}, {k3: 'v3'}] },
{external_id: 2, items: [{k1: 'v1'}] }
]
그래서 내 질문은 고전적인 for-loop를 사용하지 않고 그것을 달성하는 깨끗한 방법은 무엇입니까?
당신은 것입니다 루프에 있습니다. 당신이 루프를 선택할 수 있습니다 for
, forEach
, map
, reduce
, find
, ... 등,하지만 당신은 루프를해야합니다.
다음은 external_id로 키가 지정된 맵을 생성 한 다음 해당 맵을 항목으로 채우는 방법입니다. 마지막으로 해당 맵의 값은 결과를 나타냅니다.
let data = [{external_id: 1, items: [{k: 'v'}] },{external_id: 2, items: [{k1: 'v1'}] },{external_id: 1, items: [{k2: 'v2'}, {k3: 'v3'}] }];
let map = new Map(data.map(({external_id}) => [external_id, { external_id, items:[] }]));
data.forEach(o => map.get(o.external_id).items.push(...o.items));
let result = [...map.values()];
console.log(result);
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다