如何将数字字符按≥5转1、≤4转0的规则转换为二进制串?
数字字符转二进制标识:≥5转1,≤4转0
需求说明
需要将一串数字中的每个字符按规则转换:所有≥5的数字转为1,≤4的数字转为0。例如输入数字串7466454644,转换后得到1011010100。
当前代码背景
现有代码先将数组中的二进制字符串转为数字并求和,得到了7466454644,需要补充后续转换逻辑:
n = [ '0110100000', '1001011111', '1110001010', '0111010101', '0011100110', '1010011001', '1101100100', '1011010100', '1001100111', '1000011000' ] // array of binary let bin = [] // converting to numbers length = n.length; for (var i = 0; i < length; i++) bin.push(parseInt(n[i])); var sum = 0; // sum of all binaries for (var i = 0; i < bin.length; i++) { sum += bin[i]; } console.log(sum); // 7466454644 // ... // 需要补充转换逻辑 // ... // console.log(sumConverted) // 期望输出 1011010100
实现方案
方法1:字符串遍历处理
把求和得到的数字转为字符串,逐个字符判断后拼接结果:
// 接之前的代码 const sumStr = sum.toString(); let sumConverted = ''; for (const char of sumStr) { sumConverted += Number(char) >= 5 ? '1' : '0'; } console.log(sumConverted); // 输出 1011010100
方法2:正则表达式替换
利用正则匹配单个数字字符,结合替换函数实现转换,代码更简洁:
// 接之前的代码 const sumConverted = sum.toString().replace(/\d/g, char => Number(char) >= 5 ? '1' : '0'); console.log(sumConverted); // 输出 1011010100
方法3:数组方法链式调用
通过字符串转数组、映射转换、再转回字符串:
// 接之前的代码 const sumConverted = sum.toString() .split('') .map(char => Number(char) >= 5 ? '1' : '0') .join(''); console.log(sumConverted); // 输出 1011010100
额外优化:跳过求和步骤直接处理原始数组
如果后续sum的数值过大可能出现精度丢失,可以直接遍历原始数组的每个字符处理,避免大数问题:
// 直接处理原始数组,无需先求和 let sumConverted = ''; for (const str of n) { for (const char of str) { sumConverted += Number(char) >= 5 ? '1' : '0'; } } // 或用数组链式写法 const sumConverted = n .flatMap(str => str.split('')) .map(char => Number(char) >= 5 ? '1' : '0') .join(''); console.log(sumConverted); // 得到正确转换结果
内容的提问来源于stack exchange,提问作者deftins12
相关产品推荐
相关产品推荐

