如何处理0-1字符串:提取指定字符、转数字求和并匹配变量
处理0/1字符串的特定字符提取与验证需求
我最近碰到这么一个业务需求:需要处理一个由0和1组成的固定长度字符串,具体要求如下:
- 输入:每次内容会变化但长度固定的0/1字符串
timesheetcoldata(示例:100000000000000000000000100000000000000000000000100000000000000000000000100000000000000000000000100000000000000000000000100000000000000000000000) - 核心步骤:
- 提取字符串的第一个字符,以及之后每24个位置的字符(对应业务中的
colsCount变量),示例提取结果为"111111" - 将提取到的字符转换为数字数组,如
[1, 1, 1, 1, 1, 1] - 对数组中的数字求和,示例结果为6
- 判断求和结果是否等于变量
rowsCount,返回布尔值(相等为true,不等为false)
- 提取字符串的第一个字符,以及之后每24个位置的字符(对应业务中的
初始版本函数
最开始我只实现了字符串的拼接与输出功能,代码如下:
$("#J_timingSubmit").click(function(ev){ var sheetStates = sheet.getSheetStates(); var rowsCount = 6; var colsCount = 24; var timesheetrowsdata = ""; var timesheetcoldata = ""; for(var row= 0, rowStates=[]; row<rowsCount; ++row){ rowStates = sheetStates[row]; timesheetrowsdata += rowStates+(row==rowsCount-1?'':','); } timesheetcoldata = timesheetrowsdata.replace(/,/g, ''); console.log(timesheetcoldata); });
优化后的完成版函数
感谢Rajesh、MauriceNino及其他开发者的思路启发,我完成了满足所有需求的函数:
$("#J_timingSubmit").click(function(ev){ var sheetStates = sheet.getSheetStates(); var rowsCount = 6; var timesheetrowsdata = ""; var timesheetcoldata = ""; // 拼接并生成目标0/1字符串 for(var row= 0, rowStates=[]; row<rowsCount; ++row){ rowStates = sheetStates[row]; timesheetrowsdata += rowStates+(row==rowsCount-1?'':','); } timesheetcoldata = timesheetrowsdata.replace(/,/g, ''); // 提取指定位置字符、转换为数字数组并求和 var count = 0; var list = []; // 从索引0开始,每24个字符取一次 for(var i = 0; i< timesheetcoldata.length; i+=24) { const num1 = Number(timesheetcoldata.charAt(i)); list.push(num1); count += num1; } // 判断求和结果是否与rowsCount相等 let isSameAsRowsCount = count == rowsCount; console.log('Is Same? ', isSameAsRowsCount); });
关键逻辑说明
- 通过步长为24的
for循环,精准取出字符串中索引0、24、48...位置的字符 - 用
Number()将字符类型转为数字,同时存入数组并累加求和 - 直接通过相等运算符比较求和结果与
rowsCount,得到最终需要的布尔值
内容的提问来源于stack exchange,提问作者user11853168
相关产品推荐
相关产品推荐

