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

基于二进制输入位提取对应值为1的状态键的实现问题

解决方法:按位置分组映射状态

核心问题在于你之前没有区分每个二进制位对应的特定状态组——每一位其实对应固定的一对状态选项,而不是把所有状态混在一个对象里匹配。我们可以通过按顺序分组的方式来精准匹配每个位置对应的状态。

步骤1:按顺序定义状态分组

根据题目规则,每一位对应的状态对是固定顺序的,我们把它们整理成数组,每个元素对应一个位置的状态映射:

// 索引对应反转后的二进制位位置(第1位对应索引0,第2位对应索引1,以此类推)
const statusGroups = [
  { '0': 'item on', '1': 'item off' },
  { '0': 'item detected', '1': 'item not detected' },
  { '0': 'item responded', '1': 'item not responded' },
  { '0': 'item passed', '1': 'item failed' }
];

步骤2:编写处理函数

接下来只需要反转输入的二进制字符串,然后遍历每一位,根据索引找到对应的状态组,收集值为1的键即可:

const statusGroups = [
  { '0': 'item on', '1': 'item off' },
  { '0': 'item detected', '1': 'item not detected' },
  { '0': 'item responded', '1': 'item not responded' },
  { '0': 'item passed', '1': 'item failed' }
];

function getMatchingStatuses(binaryInput) {
  // 反转二进制字符串
  const reversedInput = binaryInput.split('').reverse().join('');
  const result = [];
  
  for (let i = 0; i < reversedInput.length; i++) {
    const bit = reversedInput[i];
    // 防止输入长度超过状态组数量
    if (i >= statusGroups.length) break;
    
    if (bit === '1') {
      result.push(statusGroups[i][bit]);
    }
  }
  
  return result;
}

// 测试示例1
console.log(getMatchingStatuses('1100')); // 输出: ["item not responded", "item failed"]
// 测试示例2
console.log(getMatchingStatuses('0010')); // 输出: ["item not detected"]

为什么这个方法能解决问题?

  • 每个位置的状态对被单独分组,确保每一位只会匹配对应的选项,不会出现混淆
  • 直接通过索引+位值获取对应键,避免了find函数只能返回第一个匹配项的问题,逻辑更精准

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 14:57:39