层级方法实现table表格某项自动求和

上一篇博客说到:table表格内不同项的层级求和,上一篇用的是watch的方法,这个方法代码繁琐,十分消耗性能,今天用一种全新的方法来解决这个问题:
simon
我这边呢是有多个大分类,分类1 分类2 分类3,然后每个分类下又有小分类,需要统计每个小分类的总额,然后统计每个大分类的总额,放到合计里面去!(这个根据个人的业务代码需求肯定是不一样的,大家根据自己需求进行更改,我这边只写自己的)

		/**
         * 修改单元格自动计算父级值
         */
        makeDataRelation(){
        //行号
            let column = this.selectedCell.columnIndex;
            //第几列
            let thisLv = this.tableData[this.selectedCell.rowIndex].computeLevel;
            //列号
            let thisRowIndex = this.selectedCell.rowIndex;
            //小分类
            if(thisLv > 1){
                this.computeParentValue(thisRowIndex,thisLv)
            }
            //大分类求和
            if(thisLv > 0){
                this.tableData[27][column] =this.tableData[0][column] + this.tableData[5][column] + this.tableData[6][column] + this.tableData[26][column]
            }
        },
        computeParentValue(rowIndex,thisLv){
            if(thisLv > 1){
                let obj = this.searchIdenticalLevel(rowIndex,thisLv);
                let sameLevelIndexArr = obj.sameLevelIndexArr;
                let parentIndex = obj.parentIndex;
                let parentValue = 0;
                //子类求和
                for (let i = 0; i < sameLevelIndexArr.length; i++) {
                    let  el = this.tableData[sameLevelIndexArr[i]];
                    parentValue += el[this.selectedCell.columnIndex];
                }
                //求和赋值给大类
                this.tableData[parentIndex][this.selectedCell.columnIndex] = parentValue;
                this.computeParentValue(parentIndex,--thisLv);
            }
        },
        searchIdenticalLevel(rowIndex,thisLv){
            let obj = {
                parentIndex:0,
                sameLevelIndexArr: []
            };
            let startIndex = 0;
            let endIndex = this.tableData.length-1;
            for (let i = rowIndex-1; i < rowIndex; i--) {
                if(this.tableData[i].computeLevel < thisLv){
                    startIndex = i+1;
                    obj.parentIndex = i;
                    break
                }
            }
            for (let i = rowIndex+1; i < this.tableData.length; i++) {
                if(this.tableData[i].computeLevel < thisLv){
                    endIndex = i-1;
                }
            }
            for (let i = startIndex; i <= endIndex; i++) {
                if(this.tableData[i].computeLevel == thisLv){
                    obj.sameLevelIndexArr.push(i)
                } 
            }
            return obj;
        },

这边只提供一个思路,具体还是要看实际情况的!

发布了34 篇原创文章 · 获赞 0 · 访问量 3634

猜你喜欢

转载自blog.csdn.net/qq_43469899/article/details/103582405