我已经弄清楚如何使用单个字符串计算数字的值,例如..
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'
我一直试图弄清楚如何将其应用于数组数组。
洞察力将非常感激
答案 0 :(得分:2)
您可以编写一个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
。
答案 1 :(得分:1)
循环显示信用卡号码并检查总和是否存储最大值并继续循环并存储最大信用卡号并将其返回:
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)
答案 2 :(得分:0)
它不是最高效的,但它简单快捷
gpu:0
答案 3 :(得分:0)
您可能会获得这样的最大金额的卡片;
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);