rapid-spreadjs 1.0.60 → 1.0.61

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.esm.js CHANGED
@@ -19376,7 +19376,6 @@ const FormulaUtils = {
19376
19376
  if (retData.allCellVals.length < 2) {
19377
19377
  return '';
19378
19378
  }
19379
- retData.allCellVals[0]; retData.allCellVals[1];
19380
19379
  try {
19381
19380
  const rangeStr = retData.allCellVals[0], num = retData.allCellVals[1];
19382
19381
  // 参数基础校验
@@ -19467,22 +19466,81 @@ const FormulaUtils = {
19467
19466
  },
19468
19467
  ],
19469
19468
  funCallback: (spread, sheet, retData) => {
19470
- // //如果传递的参数小于3个,则返回空字符串
19471
- // if (retData.allCellValsEw.length < 3) {
19472
- // return '';
19473
- // }
19474
- 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];
19475
- if (Array.isArray(x) && x.length > 0) {
19476
- x = Number(x[0]);
19469
+ //如果传递的参数小于5个,则返回空字符串
19470
+ if (retData.allCellValsEw.length < 5) {
19471
+ return '';
19477
19472
  }
19478
- else {
19479
- x = Number(x);
19473
+ const array1 = retData.allCellValsEw[0], array2 = retData.allCellValsEw[1], operator = retData.allCellValsEw[2], value = retData.allCellValsEw[3], delimiter = retData.allCellValsEw[4];
19474
+ try {
19475
+ // 参数基础校验
19476
+ if (!Array.isArray(array1) ||
19477
+ !Array.isArray(array2) ||
19478
+ array1.length !== array2.length ||
19479
+ typeof operator !== 'string' ||
19480
+ typeof delimiter !== 'string') {
19481
+ return '/';
19482
+ }
19483
+ // 验证operator参数的有效性
19484
+ const validOperators = ['>', '<', '>=', '<=', '='];
19485
+ if (!validOperators.includes(operator)) {
19486
+ return '/';
19487
+ }
19488
+ // 判断第一个数组的元素类型
19489
+ const isNumericArray = array1.length > 0 && (typeof array1[0] === 'number' || !isNaN(parseFloat(array1[0])));
19490
+ // 收集满足条件的索引
19491
+ const validIndices = [];
19492
+ for (let i = 0; i < array1.length; i++) {
19493
+ let conditionMet = false;
19494
+ if (isNumericArray) {
19495
+ // 数字数组:使用指定的比较运算符
19496
+ const num1 = parseFloat(array1[i]);
19497
+ const numValue = parseFloat(value);
19498
+ if (isNaN(num1) || isNaN(numValue)) {
19499
+ continue; // 跳过非数字元素
19500
+ }
19501
+ switch (operator) {
19502
+ case '>':
19503
+ conditionMet = num1 > numValue;
19504
+ break;
19505
+ case '<':
19506
+ conditionMet = num1 < numValue;
19507
+ break;
19508
+ case '>=':
19509
+ conditionMet = num1 >= numValue;
19510
+ break;
19511
+ case '<=':
19512
+ conditionMet = num1 <= numValue;
19513
+ break;
19514
+ case '=':
19515
+ conditionMet = num1 === numValue;
19516
+ break;
19517
+ }
19518
+ }
19519
+ else {
19520
+ // 字符串数组:只进行相等比较
19521
+ conditionMet = String(array1[i]) === String(value);
19522
+ }
19523
+ if (conditionMet) {
19524
+ validIndices.push(i);
19525
+ }
19526
+ }
19527
+ // 从第二个数组中获取对应索引的值
19528
+ const resultValues = validIndices
19529
+ .map((index) => {
19530
+ // 确保索引在第二个数组范围内
19531
+ if (index >= 0 && index < array2.length) {
19532
+ return String(array2[index]);
19533
+ }
19534
+ return '';
19535
+ })
19536
+ .filter((val) => val !== ''); // 过滤空值
19537
+ // 使用指定的分隔符连接结果[2,3,5](@ref)
19538
+ return resultValues.join(delimiter);
19539
+ }
19540
+ catch (error) {
19541
+ // 任何错误都返回"/"
19542
+ return '/';
19480
19543
  }
19481
- console.log(111, retData);
19482
- console.log(222, xData);
19483
- console.log(333, yData);
19484
- console.log(444, x);
19485
- return 'OK';
19486
19544
  },
19487
19545
  },
19488
19546
  {