操作数据

  const originData = ["1#12", "2#12", "3#13", "5#13", "4#13", "1#14"];

#后面为projectId ,前面为modelId

目标数据

const targetData = [
  { projectId: "12", modelId: ["1", "2"] },
  { projectId: "13", modelId: ["3", "5", "4"] },
  { projectId: "14", modelId: ["1"] },
];

具体实现

 function getList(list) {
  const temp = {}; // 定义的临时数据
  const arr = [];
  list.forEach((val) => {
    // 分割需要用到的数据
    const [mid, pid] = val.split("#");
    // 如果临时数据中存在当前项的projectId,则在temp[pid]值中追加modelId
    if (temp[pid]) {
      temp[pid].push(mid);
    } else {
    // 如果不存在临时数据中存储当前projectId对应modelId的值
      temp[pid] = [mid];
      arr.push({
        projectId: pid,
        modelId: temp[pid], // 这里取temp中projectId所对应的值「其实就是引用类型的用法」
      });
    }
  });
  return arr;
}

Q.E.D.


Be an interesting person