You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为表格中相同数值的数字设置同色?JS算法逻辑问题求助

问题场景
  • 数字会实时随机变化
  • 当前数字与下一个数值可能相同,也可能不同
遇到的问题

我用以下算法测试时发现两个问题:

  1. 当新值和当前值相等时,算法插入了odd,但实际应该插入even(当前值与下一个值不同时插入even的逻辑是正确的)
  2. 第11行及之后存在类名错误:第11行前的类名应为even,所以第11、12行应该是odd
测试代码
const tst = [
 { buy: 84.16 },
 { buy: 84.16 },
 { buy: 84.15 },
 { buy: 84.15 },
 { buy: 84.15 },
 { buy: 84.15 },
 { buy: 84.15 },
 { buy: 84.15 },
 { buy: 84.15 },
 { buy: 84.15 },
 { buy: 84.15 },
];

let className = [];

tst.forEach((el, i) => {
 const OLD_ELEMENT = tst[i === 0 ? 0 : i - 1].buy;
 className.push(el.buy === OLD_ELEMENT ? 'odd' : 'even');

 console.log(`${el.buy}:${OLD_ELEMENT} --- ${className[i]}`);
})
问题分析与修正

原代码的核心问题:

  • 逻辑判断完全搞反:把「与前一个值相等」对应odd,「不等」对应even,和需求匹配不上
  • 未处理连续相同值的类名继承:连续相同值应该保持同一个类名,只有值变化时才切换类名

修正后的代码:

const tst = [
 { buy: 84.16 },
 { buy: 84.16 },
 { buy: 84.15 },
 { buy: 84.15 },
 { buy: 84.15 },
 { buy: 84.15 },
 { buy: 84.15 },
 { buy: 84.15 },
 { buy: 84.15 },
 { buy: 84.15 },
 { buy: 84.15 },
];

let className = [];
// 初始化第一个元素的类名
let currentClass = 'even';

tst.forEach((el, i) => {
  if (i > 0) {
    // 和前一个值比较,不同则切换类名
    if (el.buy !== tst[i - 1].buy) {
      currentClass = currentClass === 'even' ? 'odd' : 'even';
    }
  }
  className.push(currentClass);
  console.log(`${el.buy} --- ${className[i]}`);
})

修正逻辑说明:

  1. 第一个元素默认设为even
  2. 从第二个元素开始,若当前值与前一个值不同,则切换类名(even↔odd);若相同则沿用当前类名
  3. 连续相同值会保持同一个类,值变化时自动切换,完全符合需求

内容的提问来源于stack exchange,提问作者THIAGO DE BONIS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 09:10:42