如何在数组中存储的字符串中查找数字的和

How to find sum of numbers in string stored in array

本文关键字:字符串 数字 查找 存储 数组      更新时间:2023-09-26

我已经找到了如何从单个字符串中计算数字值的方法,使用作为示例。。

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'

我一直在想如何将其应用于一组数字。。

  1. 包含函数中所需的所有变量和代码
  2. 让该函数接受一个参数,该参数将是一个信用卡号字符串数组
  3. 确定每个信用卡号的位数总和
  4. 确定哪个信用卡号的最后一个最大位数
  5. 使用退货声明以原始形式返回所需的卡号

Insight将不胜感激

您可以编写一个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);