我获得了以下对象的数组:
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/