merge.js 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. import _, { cloneDeep, keyBy, isArray, isString } from "lodash";
  2. /**
  3. * 按照键值合并两个对象数组
  4. * @param {*} arr1 数组1
  5. * @param {*} arr2 数组2
  6. * @param {*} keyArr1 数组1中的键名
  7. * @param {*} keyArr2 数组2中的键名
  8. */
  9. // // 合并数据,a,b合并,相同键值按照.merge后的对象(b)
  10. // const a = [
  11. // { name: "a", id: "1111", a: 1, b: 2, c: 3 },
  12. // { name: "b", id: "2222", a: 2 },
  13. // { name: "c", id: "3333", a: 3 },
  14. // ];
  15. // const b = [
  16. // { text: "vv", pid: "1111", a: {assas:1} },
  17. // { text: "vv", pid: "2222", a: 22 },
  18. // { text: "vv", pid: "3333", a: 33 },
  19. // ];
  20. // console.log(mergeArrByKey(a, b, "id", "pid"));
  21. export default function mergeArrByKey(arr1, arr2, keyArr1, keyArr2 = keyArr1) {
  22. if (!(arr1 && arr2 && keyArr1)) {
  23. throw new Error("请检查参数");
  24. }
  25. if (!(isArray(arr1) && isArray(arr2))) {
  26. throw new Error("请传入两个数组");
  27. }
  28. if (!isString(keyArr1)) {
  29. throw new Error("键名必须为字符串");
  30. }
  31. const newArr = _(cloneDeep(arr1))
  32. .keyBy(keyArr1)
  33. .merge(keyBy(arr2, keyArr2))
  34. .values()
  35. .value();
  36. return newArr;
  37. }