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

如何将对象数组的posi值转换为符合规则的level索引值?

问题解决:将posi值转换为指定规则的level值

原始数组

var val = [
  {
    posi: 6,
  },
  {
    posi: 4.5,
  },
  {
    posi: 2,
  },
  {
    posi: 7.5,
  },
  {
    posi: 2,
  },
  {
    posi: 5,
  },
  {
    posi: 3.5,
  },
];

转换规则与期望输出

转换规则:

  • 维护一个基础整数level值,初始为1
  • 若当前元素的posi是带.5的小数,当前元素的level为基础整数值 + 0.5,基础整数值保持不变
  • 若当前元素的posi是整数,当前元素的level为基础整数值,之后基础整数值加1

期望输出:

var val = [
  {
    level: 1,
  },
  {
    level: 1.5,
  },
  {
    level: 2,
  },
  {
    level: 2.5,
  },
  {
    level: 3,
  },
  {
    level: 4,
  },
  {
    level: 4.5,
  },
];

你的错误代码及输出

你原本的代码存在两个问题:一是误将不存在的le.level作为判断字段(原数组只有posi),二是没有正确维护递增的基础level值,导致输出不符合预期:

val = val.map((le, po) => {
  return {
    level: po + 1 - (le.level % 1 === 0.5 ? 0.5 : 0),
  };
});

实际输出:

[{"level":1},{"level":1.5},{"level":3},{"level":3.5},{"level":5},{"level":6},{"level":6.5}]

正确解决方案

我们需要用一个外部变量追踪当前的基础整数level,遍历数组时根据posi的类型动态更新level值:

let currentLevel = 1;
val = val.map(item => {
  const isHalf = item.posi % 1 === 0.5;
  const level = isHalf ? currentLevel + 0.5 : currentLevel;
  // 仅当posi为整数时,递增基础level
  if (!isHalf) {
    currentLevel++;
  }
  return { level };
});

执行这段代码后,就能得到符合预期的输出结果。

内容的提问来源于stack exchange,提问作者Township

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 15:25:24