簡體   English   中英

如何找到數組中存儲的字符串中的數字之和

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

我一直試圖找出如何將其應用於數字數組的方法。

  1. 包含函數中所需的所有變量和代碼。
  2. 讓該函數接受一個參數,它將是信用卡號字符串的數組。
  3. 確定每個信用卡號的數字總和。
  4. 確定哪個信用卡號的數字總和最大。
  5. 使用退貨聲明以其原始形式退還所需的卡號

洞察力將不勝感激

您可以編寫一個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM