[英]How to split String, convert to Numbers and Sum
我有一個已修改為獲取字符串(僅包含零和一)的函數。 字符串( timesheetcoldata
):
100000000000000000000000100000000000000000000000100000000000000000000000100000000000000000000000100000000000000000000000100000000000000000000000
字符串項(數字一和零)將在每次運行該函數時更改。 長度將始終相同。 我使上面的字符串更容易理解我要實現的目標。
我想返回第一個字符,然后每24個字符(如函數中的colsCount變量一樣)。 因此,在上面的示例中,它將返回類似以下內容的內容: 111111
然后,我想將這些字符轉換為數字(類似[1, 1, 1, 1, 1, 1]
)。
然后,我想將這些數字加起來(因此在示例中將返回6
)。
然后,我想檢查返回的數字是否與變量匹配: rowsCount
或true
如果匹配, 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
執行此類操作。 使用功能性操作可能更具可讀性,但會更加耗時( 盡管不是很多 )。
您可以嘗試以下簡單算法:
count
變量。 24
)。 在此循環結束時,您將擁有兩個值。
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.