merge.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. /**
  2. * 深度合并对象
  3. * @param {...any} param
  4. * @returns
  5. */
  6. function deepAssign(...param) {
  7. let result = Object.assign({}, ...param);
  8. for (let item of param) {
  9. for (let [idx, val] of Object.entries(item)) {
  10. if (typeof val === 'object') {
  11. result[idx] = deepAssign(result[idx], val);
  12. }
  13. }
  14. }
  15. return result;
  16. }
  17. /**
  18. * 合并数组
  19. * @param {*} arr1 数组1
  20. * @param {*} arr2 数组2
  21. * @returns
  22. */
  23. function mergeArray(arr1, arr2) {
  24. var arr = [];
  25. for (var k = 0, len = arr1.length; k < len; k++) {
  26. arr.push(arr1[k]);
  27. }
  28. for (var i = 0, len2 = arr2.length; i < len2; i++) {
  29. //是否添加该元素
  30. var flag = true;
  31. for (var j = 0, len1 = arr.length; j < len1; j++) {
  32. //如果path相同,则合并children;如果children不存在,则不合并;
  33. if (arr[j].path == arr2[i].path) {
  34. flag = false;
  35. if (arr[j].children instanceof Array && arr2[i].children instanceof Array) {
  36. arr[j].children = this.mergeArray(arr[j].children, arr2[i].children);
  37. }
  38. }
  39. }
  40. if (flag) {
  41. arr.push(arr2[i]);
  42. }
  43. }
  44. //将path为"*"的项移到最后
  45. var temp;
  46. var index;
  47. for (var n = 0, len3 = arr.length; n < len3; n++) {
  48. if (arr[n].path == '*' || arr[n].path == '/*') {
  49. index = n;
  50. }
  51. }
  52. if (index != undefined) {
  53. temp = arr[index];
  54. arr[index] = arr[len3 - 1];
  55. arr[len3 - 1] = temp;
  56. }
  57. return arr;
  58. }
  59. export default {
  60. deepAssign,
  61. mergeArray,
  62. };