UNPKG

linkmore-design

Version:

๐ŸŒˆ ๐Ÿš€lm็ป„ไปถๅบ“ใ€‚๐Ÿš€

92 lines (90 loc) โ€ข 2.37 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = calc; exports.reset = void 0; function getSum(item, dataIndex) { let sum = 0; item.children.forEach(subItem => { let value; if (/\%/.test(`${subItem[dataIndex]}`)) { value = Number(subItem[`${dataIndex}_sum`]); } else { value = Number(subItem[dataIndex]); } if (Number.isNaN(value)) { return; } sum += value; }); return sum; } // ๅˆ†็ป„ๆฑ‚ๅ’Œ่ฎก็ฎ— function calc(item, needCalcKeys, history) { if (item?.children?.length) { needCalcKeys.forEach(dkey => { if (!item.children || !item.children.length) { return; } const [dataIndex, expression] = dkey; item[`${dataIndex}_exp`] = expression; if (expression === 'sum') { const sum = getSum(item, dataIndex); item[dataIndex] = Number(sum).toFixed(2); } else if (expression === 'average') { const sum = getSum(item, dataIndex); item[dataIndex] = (sum / item.children.length).toFixed(2); } else if (expression === 'max') { let max = -Number.MAX_VALUE; item.children.forEach(subItem => { const value = Number(subItem[dataIndex]); if (Number.isNaN(value)) { return; } if (value > max) { max = value; } }); if (max === -Number.MAX_VALUE) { max = 0; } item[dataIndex] = max; } else if (expression === 'min') { let min = Number.MAX_VALUE; item.children.forEach(subItem => { const value = Number(subItem[dataIndex]); if (Number.isNaN(value)) { return; } if (value < min) { min = value; } }); if (min === Number.MAX_VALUE) { min = 0; } item[dataIndex] = min; } else if (expression === 'percent') { const sum = getSum(item, dataIndex); history.push({ item, dataIndex, sum }); } }); } } const reset = (arr, dataIndex) => { arr?.forEach(item => { if (item?.children) { reset(item?.children, dataIndex); } if (item.children) { delete item[dataIndex]; delete item[`${dataIndex}_exp`]; } }); }; exports.reset = reset;