[英]How to find sum of numbers in string stored in array
我已經舉例說明了如何從單個字符串計算數字的值。
var sum = "13-2-10-7-3".split('-').reduce(function(x, y) {
return parseInt(x)+ parseInt(y);
}); // Value of 35
我有興趣查找數字總和最大的信用卡號。 如果多個具有相同的最大數字總和,我們希望列表中的最后一位具有該總和。
這是信用卡號碼的示例數組:
['4916-2600-1804-0530', '4779-252888-3972', '4252-278893-7978', '4556-4242-9283-2260']
在上面的示例數組中,數字分別總計為49、81、81和64。 由於存在兩個具有相同總和的函數,該函數應返回具有該總和的最后一個,在這種情況下為'4252-278893-7978'
我一直試圖找出如何將其應用於數字數組的方法。
洞察力將不勝感激
您可以編寫一個maxBy
函數,該函數將您的函數用作確定數組中最大元素的參數。 這樣一來,您無需進行大量工作即可輕松調整代碼。
var cards = ['4916-2600-1804-0530', '4779-252888-3972', '4252-278893-7978', '4556-4242-9283-2260']; function maxBy(arr, func) { return arr.reduce(function(max, val) { return func(val) >= func(max) ? val : max; }, arr[0]); } function sumCC(card) { return card.split(/-|/).reduce(function(sum, val) { return sum + parseInt(val, 10); }, 0); } console.log(maxBy(cards, sumCC));
這是一個有用的實用程序功能。 Lodash實用程序庫還提供了_.maxBy
。
循環檢查信用卡號並檢查總和是否最大,然后繼續循環並存儲最大信用卡號並返回:
function max_credit_sum(arr){
max = -1
credit_card = ''
for(ele of arr){
numbers = ele.replace(/-/g, '').split('')
sum = 0
for(num of numbers){
sum += parseInt(num)
}
if(sum >= max){
credit_card = ele
max = sum
}
}
return credit_card
}
// Test
arr = ['4916-2600-1804-0530', '4779-252888-3972', '4252-278893-7978', '4556-4242-9283-2260']
maximum = max_credit_sum(arr)
它不是性能最高的,但簡單快捷
var ccs = ['4916-2600-1804-0530', '4779-252888-3972', '4252-278893-7978', '4556-4242-9283-2260'] // FSFL = F*Simple For-Loop var sum = (a, b) => a + b; var largestSum = 0; var largestSumLastIdx = 0; for (let i = 0; i < ccs.length; i++) { let s = ccs[i].split(/-|/).map(Number).reduce(sum, 0); if (s >= largestSum) { largestSum = s; largestSumLastIdx = i; } } console.log("The winner is: " + ccs[largestSumLastIdx])
您可能會這樣獲得最大金額的卡;
var cards = ['4916-2600-1804-0530', '4779-252888-3972', '4252-278893-7978', '4556-4242-9283-2260'], cardSums = cards.map(c => c.split("-").reduce((p,c) => +p + +c)), maxCard = cards[cardSums.indexOf(Math.max(...cardSums))]; console.log(maxCard);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.