类似excel实现文本中带数字的值进行规律填充[前提:字符串中数字对数相等](-)

接收字符串列表, 返回填充规则
对所有数值进行规则填充

getTextFillRule = (textList) => {
    let textNumberMatrix = [];
    let RemainTextMatrix = [];
    textList.forEach(textString => {
      let newTextString = textString || '';
      let Matrix = newTextString.match(/\d+/g) || [];
      textNumberMatrix.push(Matrix);
      Matrix.forEach(item => {
        newTextString = newTextString.replace(item, '');
      });
      RemainTextMatrix.push(newTextString);
    });
    let remainSame = RemainTextMatrix.every(item => item === RemainTextMatrix[0]);
    if (remainSame) {
      let textNumber0Len =textNumberMatrix[0].length;
      let isSquareMatrix = textNumberMatrix.every(item => item.length === textNumber0Len);
      if (isSquareMatrix) {
        let textNumberMatrixT = [];
        textNumberMatrix.forEach((item, index) => {
          item.forEach((v, i) => {
            if (index === 0) {
              textNumberMatrixT[i] = [];
            }
            textNumberMatrixT[i][index] = v;
          });
        });
        let rules = [];
        textNumberMatrixT.forEach(item => {
          let value1 = Number(item[1]);
          let value0 = Number(item[0]);
          if (this.isArithmeticSequence(item)) { // 判断是否时等差数列。等差数列虽然也可以用最小二乘实现, 但是等差快一些
            rules.push(({ n }) => {
              return n * (value1 - value0) + value0;
            });
          } else {
            rules.push(this.getLeastSquares(item.map(value => Number(value)))); // 获取最小二乘结果的函数, 可用库或者自己实现
          }
        });
        return ({ n }) => {
          let newString = textList[0] || '';
          rules.forEach((item, index) => {
            let baseNumber = textNumberMatrix[0][index];
            let replaceValue = baseNumber[0] === '0' ? `0${item({ n })}` : item({ n });
            newString = newString.replace(baseNumber, replaceValue);
          });
          return newString;
        };
      }
    }
    return ({ value }) => { 
      return value; 
    };
  }
  ```
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值