簡體   English   中英

如何拆分字符串,轉換為數字和總和

[英]How to split String, convert to Numbers and Sum

我有一個已修改為獲取字符串(僅包含零和一)的函數。 字符串( timesheetcoldata ):

100000000000000000000000100000000000000000000000100000000000000000000000100000000000000000000000100000000000000000000000100000000000000000000000

字符串項(數字一和零)將在每次運行該函數時更改。 長度將始終相同。 我使上面的字符串更容易理解我要實現的目標。

我想返回第一個字符,然后每24個字符(如函數中的colsCount變量一樣)。 因此,在上面的示例中,它將返回類似以下內容的內容: 111111

然后,我想將這些字符轉換為數字(類似[1, 1, 1, 1, 1, 1] )。

然后,我想將這些數字加起來(因此在示例中將返回6 )。

然后,我想檢查返回的數字是否與變量匹配: rowsCounttrue如果匹配, rowsCount 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);

});

您始終可以依靠傳統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) 

這是有關操作的逐步說明。

  • 使用match()獲取第n個字符
  • 使用map()轉換數組元素
  • 使用reduce()對數組元素求和

需要說明的所有內容都包含在代碼注釋中:

 const testData = '100000000000000000000000100000000000000000000000100000000000000000000000100000000000000000000000100000000000000000000000100000000000000000000000'; // Step 1) Create array of numbers from string const dataArr = testData.match(/.{1,24}/g) // Split on every 24th char .map(s => Number(s[0])) // Only take the first char as a Number console.log(dataArr); // Step 2) Sum array Numbers let dataSum = dataArr.reduce((a, b) => a + b); // Add up all numbers console.log(dataSum); // Step 3) Compare your variables let rowsCount = 123; // Your Test variable let isSameAsRowsCount = dataSum == rowsCount; console.log('Is Same? ', isSameAsRowsCount); 

如@Jaromanda所述,您可以使用以下代碼來完成此操作。

 const string = '100000000000000000000000100000000000000000000000100000000000000000000000100000000000000000000000100000000000000000000000100000000000000000000000'; const value = string.split('').filter((e,i)=> !(i%24)).reduce((acc,cur)=> acc+ (+cur), 0); console.log(value); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM