javascript - TS - 循环遍历对象数组,如果找不到则添加到新数组

标签 javascript arrays database typescript object

我获得了以下对象的数组:

export interface Part {
  workOrder?: string;
  task?: string;
  partNumber?: string;
  qty?: number;
  image?: string;
  name?: string;
}

我希望能够循环遍历每个数组并从以下界面创建一个新数组:

export interface WorkOrder {
  workOrder?: string;
  tasks?: Array<string>;
}

这是我的代码的样子

let partList: Part[] = [ 
  { workOrder: "W1", task: "do something", ... },
  { workOrder: "W1", task: "something else", ... },
  { workOrder: "W2", task: "do something", ... },
  { workOrder: "W2", task: "something else", ... }
];

let workOrders: WorkOrder[] = [];

我希望能够将每个部分的 workOrder 和任务添加到 workOrders 数组中,但如果 W1 已添加,那么我需要它将第二个任务“其他内容”添加到来自 W1 对象的任务数组。

最终结果应如下所示:

workOrders = [ 
  { workOrder: "W1", tasks: [ "do something", "something else" ] },
  { workOrder: "W2", tasks: [ "do something", "something else" ] }
];

我几乎让它与一些 for 循环一起工作并检查 .indexOf() 中的某些数组,但我觉得可能有更好的方法。

最佳答案

partList.forEach(elm => {
  if (!workOrders.find(wo => wo.workOrder == elm.workOrder)) {
      workOrders.push({ workOrder: elm.workOrder, tasks: new Array(elm.task) 
  });
  } else {
      workOrders.find(wo => wo.workOrder == 
      elm.workOrder).tasks.push(elm.task);
  }
})

您可以使用 find 方法查找是否添加了元素,如果添加了则推送到任务或创建新的工单。

关于javascript - TS - 循环遍历对象数组,如果找不到则添加到新数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48624066/

相关文章:

javascript - Angular JS 中的嵌套 View

javascript - 限制历史状态更改以防止浏览器挂起

javascript - 二叉堆 - 为什么删除函数需要调用 bubbleUp 方法?

c++ - IntelliSense:类型为 "const char *const []"的成员不能具有类内初始化程序

java - 如何使扫描仪变量成为数组?

sql - SQL Server如何统计提交人数

c# - 如何用SqlCommandBuilder给DataTable中的指定列加值

javascript - 如何使用 javascript 在给定单词的输出中打印字典单词

c# - DataGridView 中的 BLOB 数据到简单字符串?

mysql - 相同的 MySQL 数据库导入显示不同数量的记录