2016-08-25 54 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 
相关问题