Javascript에서 id로 객체 배열에서 객체를 빼는 방법

8479 단어 nodejavascript
데이터베이스에 데이터를 추가하고 싶지만 중복이 없는 경우를 고려하십시오.

따라서 두 개의 개체가 있습니다. 하나는 데이터베이스에 내 데이터가 있고 다른 하나는 추가할 데이터가 있습니다.

각각의 예에서: records 및 mainArr.

제목에서 알 수 있듯이 이 경우 두 번째(mainArr) 배열에서 첫 번째(레코드)의 요소를 id로 빼야 합니다.

채택할 수 있는 많은 알고리즘이 있습니다. 아래는 예입니다.

const records = [
  {
    id: 1,
    name: "example1"
  },
  {
    id: 2,
    name: "example2"
  },
  {
    id: 3,
    name: "example3"
  },
  {
    id: 4,
    name: "example4"
  },
];

const mainArr = [
  {
    id: 3,
    name: "example3"
  },
  {
    id: 4,
    name: "example4"
  },
  {
    id: 5,
    name: "example5"
  },
  {
    id: 6,
    name: "example6"
  },
];

const recordsById = records.reduce((ac, record) => {
  if (record.id) {
    return {
      ...ac,
      [record.id]: record
    }
  }
  return ac
}, {});

const objClean = mainArr.filter((item) => {
  const isDuplicated = recordsById[item.id];
  return !isDuplicated;
});

console.log(objClean);


reduce을 사용하여 식별자를 키로, 객체 자체를 값으로 사용하여 객체 배열을 편리하게 얻습니다.

그러면 다음과 유사한 결과가 나타납니다.

 recordsById: {
    1: { name: "example1", id: 1 },
    2: { name: "example2", id: 2 },
    3: { name: "example3", id: 3 },
    4: { name: "example4", id: 4 },
  }


그런 다음 filter 메서드를 통해 두 번째 배열(mainArr)의 요소에 생성된 매핑의 요소가 포함되어 있는지 확인할 수 있습니다.

깨끗한 개체(objClean)를 출력합니다.

다음은 동일한 논리의 보다 간결한 버전입니다.

const recordsById = records.reduce((ac, record) => {
  return record.id ? { ...ac, [record.id]: record } : ac;
}, {});

const objClean = mainArr.filter(item => !recordsById[item.id]);

좋은 웹페이지 즐겨찾기