rapid-spreadjs 1.0.60 → 1.0.62

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs.js CHANGED
@@ -19398,11 +19398,10 @@ const FormulaUtils = {
19398
19398
  if (retData.allCellVals.length < 2) {
19399
19399
  return '';
19400
19400
  }
19401
- retData.allCellVals[0]; retData.allCellVals[1];
19402
19401
  try {
19403
19402
  const rangeStr = retData.allCellVals[0], num = retData.allCellVals[1];
19404
19403
  // 参数基础校验
19405
- if (typeof rangeStr !== 'string' || typeof num !== 'number' || isNaN(num)) {
19404
+ if (rangeStr == null || rangeStr == undefined || typeof rangeStr !== 'string' || typeof num !== 'number' || isNaN(num)) {
19406
19405
  return '/';
19407
19406
  }
19408
19407
  // 去除字符串中的空格
@@ -19489,22 +19488,81 @@ const FormulaUtils = {
19489
19488
  },
19490
19489
  ],
19491
19490
  funCallback: (spread, sheet, retData) => {
19492
- // //如果传递的参数小于3个,则返回空字符串
19493
- // if (retData.allCellValsEw.length < 3) {
19494
- // return '';
19495
- // }
19496
- let xData = FormulaUtils.commFun.convertToInt(retData.allCellValsEw[0].filter((item) => FormulaUtils.commFun.isNumber(item))), yData = FormulaUtils.commFun.convertToInt(retData.allCellValsEw[1].filter((item) => FormulaUtils.commFun.isNumber(item))), x = retData.allCellValsEw[2];
19497
- if (Array.isArray(x) && x.length > 0) {
19498
- x = Number(x[0]);
19491
+ //如果传递的参数小于5个,则返回空字符串
19492
+ if (retData.allCellValsEw.length < 5) {
19493
+ return '';
19499
19494
  }
19500
- else {
19501
- x = Number(x);
19495
+ const array1 = retData.allCellValsEw[0], array2 = retData.allCellValsEw[1], operator = retData.allCellValsEw[2], value = retData.allCellValsEw[3], delimiter = retData.allCellValsEw[4];
19496
+ try {
19497
+ // 参数基础校验
19498
+ if (!Array.isArray(array1) ||
19499
+ !Array.isArray(array2) ||
19500
+ array1.length !== array2.length ||
19501
+ typeof operator !== 'string' ||
19502
+ typeof delimiter !== 'string') {
19503
+ return '/';
19504
+ }
19505
+ // 验证operator参数的有效性
19506
+ const validOperators = ['>', '<', '>=', '<=', '='];
19507
+ if (!validOperators.includes(operator)) {
19508
+ return '/';
19509
+ }
19510
+ // 判断第一个数组的元素类型
19511
+ const isNumericArray = array1.length > 0 && (typeof array1[0] === 'number' || !isNaN(parseFloat(array1[0])));
19512
+ // 收集满足条件的索引
19513
+ const validIndices = [];
19514
+ for (let i = 0; i < array1.length; i++) {
19515
+ let conditionMet = false;
19516
+ if (isNumericArray) {
19517
+ // 数字数组:使用指定的比较运算符
19518
+ const num1 = parseFloat(array1[i]);
19519
+ const numValue = parseFloat(value);
19520
+ if (isNaN(num1) || isNaN(numValue)) {
19521
+ continue; // 跳过非数字元素
19522
+ }
19523
+ switch (operator) {
19524
+ case '>':
19525
+ conditionMet = num1 > numValue;
19526
+ break;
19527
+ case '<':
19528
+ conditionMet = num1 < numValue;
19529
+ break;
19530
+ case '>=':
19531
+ conditionMet = num1 >= numValue;
19532
+ break;
19533
+ case '<=':
19534
+ conditionMet = num1 <= numValue;
19535
+ break;
19536
+ case '=':
19537
+ conditionMet = num1 === numValue;
19538
+ break;
19539
+ }
19540
+ }
19541
+ else {
19542
+ // 字符串数组:只进行相等比较
19543
+ conditionMet = String(array1[i]) === String(value);
19544
+ }
19545
+ if (conditionMet) {
19546
+ validIndices.push(i);
19547
+ }
19548
+ }
19549
+ // 从第二个数组中获取对应索引的值
19550
+ const resultValues = validIndices
19551
+ .map((index) => {
19552
+ // 确保索引在第二个数组范围内
19553
+ if (index >= 0 && index < array2.length) {
19554
+ return String(array2[index]);
19555
+ }
19556
+ return '';
19557
+ })
19558
+ .filter((val) => val !== ''); // 过滤空值
19559
+ // 使用指定的分隔符连接结果[2,3,5](@ref)
19560
+ return resultValues.join(delimiter);
19561
+ }
19562
+ catch (error) {
19563
+ // 任何错误都返回"/"
19564
+ return '/';
19502
19565
  }
19503
- console.log(111, retData);
19504
- console.log(222, xData);
19505
- console.log(333, yData);
19506
- console.log(444, x);
19507
- return 'OK';
19508
19566
  },
19509
19567
  },
19510
19568
  {