一、find方法 (返回符合条件的第一个元素 如果没有符合条件的 返回undefined) findIndex方法(返回符合条件的第一个元素位置 如果没有符合条件的返回 -1)

比如:

const modeler = this.$refs.refNode.modeler;
        const canvas = modeler.get('canvas')
        console.log("fillColor modeler=",modeler)
        modeler._definitions.rootElements[0].flowElements.forEach(n => {
        const completeTask = this.taskList.find(m => m.key === n.id)

        要是满足条件的元素有多个,上面返回满足条件的第一个元素,所以即使满足条件有多个,也只返回第一个

二、filter方法 (返回 符合过滤条件的元素组成的新数组)

比如:

const modeler = this.$refs.refNode.modeler;
        const canvas = modeler.get('canvas')
        console.log("fillColor modeler=",modeler)
        modeler._definitions.rootElements[0].flowElements.forEach(n => {
          const completeTask = this.taskList.filter(m => m.key === n.id)

       要是满足上面条件有多个元素,上面方法就返回满足条件的多个元素。

三、实际流程显示的bug修复

       对于流程流转过程中,流程对某个节点可能又多次的通过与退回情况,所以就会存在满足一个节点的有多个任务处理情况,原先用find函数就只能返回一个元素,不符合实际情况,所以进行修改,改用filter 如下:

fillColor() {
const modeler = this.$refs.refNode.modeler;
const canvas = modeler.get('canvas')
console.log("fillColor modeler=",modeler)
modeler._definitions.rootElements[0].flowElements.forEach(n => {
//const completeTask = this.taskList.find(m => m.key === n.id)
const completeTask = this.taskList.filter(m => m.key === n.id)
const todoTask = this.taskList.find(m => !m.completed)
const endTask = this.taskList[this.taskList.length - 1]
if (n.$type === 'bpmn:UserTask') {
if (completeTask) {
canvas.addMarker(n.id, completeTask[completeTask.length-1].completed ? 'highlight' : 'highlight-todo')
//canvas.addMarker(n.id, completeTask.completed ? 'highlight' : 'highlight-todo')
n.outgoing.forEach(nn => {
const targetTask = this.taskList.find(m => m.key === nn.targetRef.id)
if (targetTask) {
if (todoTask && completeTask.key === todoTask.key && !todoTask.completed) {
canvas.addMarker(nn.id, todoTask.completed ? 'highlight' : 'highlight-todo')
canvas.addMarker(nn.targetRef.id, todoTask.completed ? 'highlight' : 'highlight-todo')
} else {
canvas.addMarker(nn.id, targetTask.completed ? 'highlight' : 'highlight-todo')
canvas.addMarker(nn.targetRef.id, targetTask.completed ? 'highlight' : 'highlight-todo')
}
}
})
}
}

四、效果图如下:

VUE里的find与filter使用与区别_前端