如何将数组项的单个值存储到父索引中?

时间:2016-08-25 00:40:48

标签: javascript arrays for-loop nested-loops

我试图遍历一个数组,其中包含使用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

如何在不将它们全部添加的情况下添加每个索引?

2 个答案:

答案 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

答案 1 :(得分:0)

我认为你对最终的解决方案非常接近,所以我不会再为另一个解决方案而烦恼。

基本上你需要的是一个变量,在这种情况下我使用object来包含有关当前largest Itemlargest item value的信息。

对于每次迭代,在执行嵌套循环后,您应该知道项目的权重。然后使用项目值,将其与当前最大值进行比较。如果它大于现有的最大值,则覆盖其细节。此外,您使用当前项的值增加sum变量,这样您就可以获得两种信息。

示例:

&#13;
&#13;
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);
&#13;
&#13;
&#13;