[英]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.