2016-04-06 67 views
0

我正在嘗試在JavaScript中編寫一個函數,用於比較數組中列出的字符串的信用卡號。該函數應該找到總和最大的信用卡號碼,並將該號碼作爲輸入數組中的原始字符串返回。我完全卡住了,無法越過這個'未定義'的錯誤信息。這裏是我有:比較數組中的元素,找到元素的最大總和

function highest(inputArray) { 
    var sum = 0; 
    var currentHighest = 0; 
    var largest = 0; 
    for (a = 0; a < inputArray.length; a++) { 
    var tempArray = inputArray[a].replace(/\D/g, ''); 
    } 

    function sumDigits(str) { 
    sum = 0; 
    for (i = 0; i < str.length; i++) { 
     sum += parseInt(str.charAt(i), 16); 
    } 
    return sum; 
    } 
    if (sumDigits(tempArray) >= currentHighest) { 
    currentHighest = sum; 
    largest = inputArray[a]; 
    return largest; 
    } else { 
    return largest; 
    } 
} 
var numberArray = []; 
console.log(highest(numberArray)); 
+0

請問你能分享一下你試過的代碼嗎?這是很難幫助,除非你發佈一些代碼 – brk

+0

我看到未定義的代碼,請提供一些我們可以使用 –

+0

@MthetheR請不要在評論中代碼。點擊[編輯]按鈕。 –

回答

-1

基於我對你的問題的理解,我希望這是你在找什麼。

除了在數組上進行基本循環之外,您還可以按升序對數組進行排序,並簡單地挑出數組的最後一項作爲最大的信用卡號。

樣品小提琴這裏:

https://jsfiddle.net/xxo3m8zf/1/

示例函數:

function largestSum(arr) { 
    arr.sort(); 
    return largest = arr[arr.length-1]; 
} 
-1
'use strict'; 

// initial array of numbers 
let numbers = ['4916-2600-1804-0530', '4779-2528-0088-3972', '4252-2788-0093-7978', '4556-4242-9283-2260']; 

// remove "-" symbol 
let normilized = numbers.map(number => number.replace(/-/g, '')); 

// get sum for each number 
let sums = normilized.map(
    number => [].reduce.call(number, (prev, value) => { 
    prev += +value; 
    return prev; 
}, 0)); 

// find max sum 
let max = Math.max.apply(null, sums); 

// find position of that sum 
let indexOfMax = sums.indexOf(max); 

// get card number 
console.log(numbers[indexOfMax]); 
+0

謝謝你打破這種情況,它有很大的意義。由於第二張和第三張卡號具有相同的總和,因此如何讓功能返回最後列出的號碼(在此情況下爲第三張卡號(索引2))? –

+0

根據https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/indexOf,indexOf返回指定值的第一個匹配項,所以如果您的卡片數量相同,那麼函數返回第一個 –

0

你在你的代碼的好一些基本的錯誤。我將簡單地將代碼修改放在這裏,而不是分解它。

var ipa = ['4916-2600-1804-0530', '4779-2528-0088-3972', '4252-2788-0093-7978', '4556-4242-9283-2260']; 

function highest(inputArray) { 
    var currentHighest = 0; 
    var largest = 0; 
    var tempArray = []; 
    for (var a = 0; a < inputArray.length; a++) { 
    tempArray.push(inputArray[a].replace(/\D/g, '')); 
    } 
    function sumDigits(strA) { 
    var sum = 0; 
    for (var i = 0; i < strA.length; i++) { 
     sum += parseInt(strA.charAt(i), 10); 
    } 
    return sum; 
    } 

    for (var a = 0; a < tempArray.length; a++) { 
    var csum = sumDigits(tempArray[a]); 
    if (csum >= currentHighest) { 
     currentHighest = csum; 
     largest = inputArray[a]; 
    } 
    } 
    return largest; 
} 

console.log(highest(ipa));