wangting
2025-01-08 354cad3d3ab22ba147169beb6a0f6f51b9bab3a8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
import { formatDate } from "@/util/formatTime";
 
//处理动态表单函数数组提取格式 {prop:key}
export const handlerObj = (prop, key, data) => {
  const keyObj = data.reduce((v, cur) => {
    if (!v[cur[prop]]) {
      v[cur[prop]] = [];
    }
    v[cur[prop]] = cur[key];
    return v;
  }, {});
  return keyObj;
};
//处理动态表单函数数组提取格式 {prop:key}
export const handlerProp = (prop, data) => {
  const keyObj = data.reduce((v, cur) => {
    if (!v[cur[prop]]) {
      v[cur[prop]] = [];
    }
    v[cur[prop]] = undefined;
    return v;
  }, {});
  return keyObj;
};
 
//过滤对象空值/单个值
export const filterateObj = (obj, filter) => {
  return Object.entries(obj).reduce((acc, [key, value]) => {
    if (!filter) {
      if (value !== "" && value !== null && value !== undefined) {
        acc[key] = value;
      }
    } else {
      if (value !== filter) {
        acc[key] = value;
      }
    }
    return acc;
  }, {});
};
// 过滤数组多个值
export const filterateKeys = (data, keys, prop = "prop") => {
  if (typeof keys === "string") keys = keys.split(",");
  return data.filter((v) => {
    if (keys.length > 0) {
      for (let key of keys) {
        if (v[prop] == key) {
          return false;
        }
      }
    }
    return true;
  });
};
 
/**
 * 下载文件
 * @param data    文件流程
 */
export function blobDownload(data) {
  const newFileName = formatDate(new Date(), "yyyyMMddHHmmss");
  //如果能用,打赏下呗 博主猜坑不容易 头发都白了很多
  let name = newFileName;
  var content = data;
  var datas = new Blob([content], {
    type: "application/vnd.ms-excel;charset=utf-8",
  });
  var downloadUrl = window.URL.createObjectURL(datas);
  var anchor = document.createElement("a");
  anchor.href = downloadUrl;
  anchor.download = name + ".xls";
  anchor.click();
  window.URL.revokeObjectURL(datas);
}
/**
 * 数组合并取并集
 * @param arr    数组1   主
 * @param data     数组2 辅
 * @param key     数组2的相同字段key
 * @param prop     数组2的字段拼接到数组1中,不传默认全部字段
 */
export function combineData(arr, data, key, prop) {
  let newArr = [];
  data.forEach((d) => {
    let findObj = arr.find((a) => a.id === d[key]);
    if (findObj) {
      newArr.push(findObj);
    }
  });
 
  const arrArray = newArr.map((obj, index) => {
    if (prop) {
      const filteredObj = Object.fromEntries(
        Object.entries(data[index]).filter(([key]) => prop.includes(key))
      );
      return { ...obj, ...filteredObj };
    } else {
      return { ...obj, ...data[index] };
    }
  });
  const differentObjects = arr.filter(
    (v) => !data.some((da) => da[key] === v.id)
  );
  console.log("newArr", differentObjects);
  const r = [...differentObjects, ...arrArray];
  return r;
}