基于二进制输入位提取对应值为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
相关产品推荐
相关产品推荐

