>source

Lodash 병합을 사용하여 이 두 개체를 병합하려고 합니다.

서버 개체:

[
  {
    "id": "74738",
    "customerId": "534430"
  },
  {
    "id": "74742",
    "customerId": "534429"
  }
]

로컬 개체

[
  {
    "customerId": "534429"
    "name": "ABC"
  },
  {
    "customerId": "534430",
    "name": "XYZ"
  },
]

속성을 기반으로 이 두 객체를 결합하기 위해 lodash merge를 사용하고 있으며 아래 code를 사용하고 있습니다.

merge({}, serverObject, localObject);
//Output: [{"id":"74738","customerId":"534429","name":"ABC"},{"id":"74742","customerId":"534430","name":"XYZ"}]

객체는 고객 ID를 기반으로 업데이트되지 않고 대신 로컬 개체의 순서에 따라 업데이트됩니다.

예상 출력:

[{"id":"74738","customerId":"534430","name":"ABC"},{"id":"74742","customerId":"534429","name":"XYZ"}]

  • 답변 # 1

    lodash를 사용하면 다음을 사용하여 모든 배열을 단일 배열로 결합할 수 있습니다._.단조롭게 하다(), 술어로 그룹화한 다음 각 그룹을 단일 개체에 매핑하고 병합합니다.

    참고: 귀하의고객 ID정수인 경우 항목은 숫자 값으로 정렬됩니다.

    const { map, groupBy, flatten, merge }= _
    const fn= (predicate, ...arrs)=> map(
      groupBy(flatten(arrs), predicate),
      group=> merge({}, ...group)
    )
    const arr1= [{"id":"74738","customerId":"534430"},{"id":"74742","customerId":"534429"}]
    const arr2= [{"customerId":"534429","name":"ABC"},{"customerId":"534430","name":"XYZ"}]
    const result= fn('customerId', arr1, arr2)
    console.log(result)

    <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js" integrity="sha512-WFN04846sdKMIP5LKNphMaWzU7YpMyCU245etK3g/2ARYbPK9Ub18eG+ljU96qKRCWh+quCY7yefSmlkQw1ANQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>

    원래 순서를 유지해야 하는 경우 단일 배열로 병합한 다음 술어의 결과를 키로 사용하여 항목을 Map으로 축소합니다. 동일한 키를 가진 각각의 새 항목을 맵의 기존 항목에 병합합니다. 다음을 사용하여 맵의 값을 다시 배열로 변환합니다.Array.from():

    const fn= (predicate, ...arrs)=> Array.from(arrs
      .flat()
      .reduce((acc, o)=> {
        const key= predicate(o)
        return acc.set(key, { ...acc.get(key), ...o })
      }, new Map()).values()
    )
    const arr1= [{"id":"74738","customerId":"534430"},{"id":"74742","customerId":"534429"}]
    const arr2= [{"customerId":"534429","name":"ABC"},{"customerId":"534430","name":"XYZ"}]
    const result= fn(o=> o.customerId, arr1, arr2)
    console.log(result)

  • 이전 Visual C++를 사용하여 Windows에서 명령줄로 sqlite3.dll을 빌드하는 방법은 무엇입니까?
  • 다음 xcode : m1 pro 빌드 iOS 앱 런타임 오류: COLLADA 파일은 이 플랫폼에서 지원되지 않습니다.