Frontend/JavaScript & Jquery

[JS] Array 배열 group별로 묶는 방법

전예방 2024. 8. 21. 00:13
const array = [
  {
    id: 1,
    type: "사과",
    dueDate: "20241215",
    price: 11369,
  },
  {
    id: 2,
    type: "바나나",
    dueDate: "20241215",
    price: 19194,
  },
  {
    id: 3,
    type: "사과",
    dueDate: "20241215",
    price: 9010,
  },
  {
    id: 4,
    type: "사과",
    dueDate: "20241208",
    price: 19517,
  },
  {
    id: 5,
    type: "바나나",
    dueDate: "20241208",
    price: 18910,
  },
  {
    id: 6,
    type: "바나나",
    dueDate: "20241208",
    price: 3936,
  },
  {
    id: 7,
    type: "키위",
    dueDate: "20240927",
    price: 13938,
  },
  {
    id: 8,
    type: "키위",
    dueDate: "20240927",
    price: 4495,
  },
  {
    id: 9,
    type: "배",
    dueDate: "20240927",
    price: 16801,
  },
  {
    id: 10,
    type: "배",
    dueDate: "20240927",
    price: 12689,
  },
];

const array2 = [
  {
    id: 11,
    type: "사과",
    dueDate: "20240927",
    price: 20000,
  },
  {
    id: 12,
    type: "바나나",
    dueDate: "20240927",
    price: 34000,
  },
  {
    id: 13,
    type: "키위",
    dueDate: "20240209",
    price: 2090,
  },
  {
    id: 14,
    type: "배",
    dueDate: "20240209",
    price: 4900,
  },
];

이런 array를 type을 이용해 묶고 싶다.

 

이런식으로 

 

const groupBy = array.reduce((acc, item) => {
  const { type, dueDate } = item;
  acc[type] = acc[type] || [];
  acc[type].push({ ...item });
  return acc;
}, {});

 

array2도 추가로 합치고 싶을 때는?

const groupBy2 = array2.reduce((acc, item) => {
  const { type, dueDate } = item;
  acc[type] = acc[type] || [];
  acc[type].push({ ...item });
  return acc;
}, {});

const mergeObjects = (obj1, obj2) => {
  const result = { ...obj1 };

  Object.keys(obj2).forEach((key) => {
    if (Array.isArray(obj2[key]) && Array.isArray(obj1[key])) {
      result[key] = [...obj1[key], ...obj2[key]];
    } else {
      result[key] = obj2[key];
    }
  });

  return result;
};

console.log(mergeObjects(groupBy, groupBy2));

 

groupBy 변수는 함수로 만들 수 있을 것 같다.

function groupBySomething(array, something) {
  return array.reduce((acc, item) => {
    const groupKey = item[something]; // key에 따라 그룹화 기준을 설정
    acc[groupKey] = acc[groupKey] || [];
    acc[groupKey].push({ ...item });
    return acc;
  }, {});
}

// 타입으로 그룹을 묶을 수 있고
console.log(
  'groupBySomething(array, "type"): ',
  groupBySomething(array, "type"),
);

// dueDate로 그룹을 묶을 수 있다
console.log(
  'groupBySomething(array, "dueDate"): ',
  groupBySomething(array, "dueDate"),
);

 

 

'Frontend/JavaScript & Jquery'의 다른글

  • 현재글 [JS] Array 배열 group별로 묶는 방법

관련글