首页 > 解决方案 > 如何拆分字符串,转换为数字和求和

问题描述

我有一个函数,我已经修改它来获取一个字符串(仅由零和一组成)。字符串 ( timesheetcoldata):

100000000000000000000000100000000000000000000000100000000000000000000000100000000000000000000000100000000000000000000000100000000000000000000000

每次运行函数时,字符串项(数字一和零)都会改变。它总是相同的长度。我已经使上面的字符串更容易看到我想要实现的目标。

我想返回第一个字符,然后返回每 24 个字符(如函数中的变量 colsCount 中)。因此,在上面的示例中,它将返回如下内容:111111

然后我想将这些字符转换为数字(类似于[1, 1, 1, 1, 1, 1])。

然后我想将这些数字相加(所以它会返回,在示例中:)6

然后我想检查返回的数字是否与变量匹配:rowsCount 或者true如果匹配,false如果不匹配。

我的功能:

$("#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 = "";

  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 = [];
for(var i = 0; i< timesheetcoldata.length; i+=24) {
  const num1 = Number(timesheetcoldata.charAt(i));
  list.push(num1);
  count += num1;
}

let isSameAsRowsCount = count == rowsCount;
console.log('Is Same? ', isSameAsRowsCount);

});

标签: javascriptstringsplitsumdata-conversion

解决方案


您始终可以依靠传统for的方式进行此类操作。使用函数式操作可以更具可读性,但会更耗时(虽然不是很多)。

你可以试试这个简单的算法:

  1. 创建一个包含所有数字的列表和一个count保存总和的变量。
  2. 循环字符串。由于字符串是固定的,您可以将增量因子设置为 count( 24)。
  3. 转换给定索引处的字符并将其保存在变量中。
  4. 将此变量推送到列表中,并在每个间隔计算总和。

在此循环结束时,您拥有两个值。

var string = '100000000000000000000000100000000000000000000000100000000000000000000000100000000000000000000000100000000000000000000000100000000000000000000000';
var count = 0;
var list = [];
for(var i = 0; i< string.length; i+=24) {
  const num1 = Number(string.charAt(i));
  list.push(num1);
  count += num1;
}

console.log(list, count)


推荐阅读