2016-08-25 9 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

ダイナマイト!ありがとうございました。 –

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 
関連する問題