2016-08-25 50 views
1

我想通過使用for循環的字符串迭代,然後嵌套for循環將每個單獨的字符轉換爲數字,條件語句忽略' - ',然後在每個數字中添加數字個別指標,然後比較每個指標的最大總和並返回總和最大的指標。如何將數組項的個別值存儲到父索引中?

var cards = ['98-23', '65-98', '43-14', '28-63']; 
var sum = 0; 
for (var i = 0; i < cards.length; i++) { 
    console.log('i // ' + i); 
    for (var j = 0; j < cards[i].length; j++) { 
    if (cards[i][j] !== '-') { 
     sum += parseInt(cards[i][j]); 
     console.log(sum); 
    } 
    } 
} 

輸出爲:

i // 0 
9 
17 
19 
22 
i // 1 
28 
33 
42 
50 
i // 2 
54 
57 
58 
62 
i // 3 
64 
72 
78 
81 

我試圖實現

for(var j = 0; j <= cards[i].length; j++) { 
} 

但它返回;

i // 0 
9 
17 
19 
22 
NaN 
i // 1 
5 > NaN 
i // 2 
5 > NaN 
i // 3 
5 > NaN 

我該如何添加每個單獨的索引而不將它們全部添加在一起?

+1

幫我理解 - 你想要*回來什麼? –

+0

我想在數組中添加整數後得到數組中最大的項。即索引0的和爲22,9 + 8 + 2 + 3 ..等。 –

回答

0

我認爲你對最終的解決方案相當封閉,所以我不會太爲這個解決方案而煩惱。

基本上,您需要的是一個變量,在這種情況下,我使用了object來包含有關當前largest Itemlargest item value的信息。

對於每次迭代,執行嵌套循環後,您應該知道項目的權重。然後使用項目值,將其與當前最大值進行比較。如果它大於現有最大值,則覆蓋其詳細信息。此外,您可以用當前項目的值增加sum變量,這樣您就可以收集到兩個信息。

例子:

var cards = ['98-23', '65-98', '43-14', '28-63']; 
 
    
 
// For tracking what is the current largest and total sum 
 
var sum = 0; 
 
var largestItem = { 
 
    item : "", 
 
    value : 0 
 
}; 
 
    
 
// For each item in array 
 
for (var i = 0; i < cards.length; i++) { 
 
    var itemValue = 0; 
 

 
    // for each character within item 
 
    for (var j = 0; j < cards[i].length; j++) { 
 
    if (cards[i][j] !== '-') { 
 
     itemValue += parseInt(cards[i][j]); 
 
    } 
 
    } 
 

 
    // Compare with current largest 
 
    if (itemValue > largestItem.value) { 
 
    largestItem.item = cards[i]; 
 
    largestItem.value = itemValue; 
 
    } 
 

 
    // Increment sum with existing item value 
 
    sum += itemValue; 
 
} 
 

 
console.log("Sum = " + sum); 
 
console.log("Largest item = " + largestItem.item); 
 
console.log("Largest item value = " + largestItem.value);

+0

Dynamite!謝謝。 –

1

薩穆埃爾的表現非常出色,我只是想補充這一個功能更強大的方法和慣例(ES6)。我不明白你是否想要最大價值的「指數」,或者只是最大的價值。這將返回最大值

var cards = ['98-23', '65-98', '43-14', '28-63']; 

cards.map(([...v]).filter(Number)).reduce((p,c) => { 
    return p.concat(c.reduce((x,y) => x +=+y,0)) 
}, []).sort((a,b) => b-a).shift() 
//28 
相關問題