如何将数组项的单个值存储到父索引中?
How do I store individual value of array items into parent index?
我正在尝试遍历一个包含使用 for 循环的字符串的数组,然后使用嵌套的 for 循环将每个单独的字符转换为数字,使用条件语句省略“-”,然后添加数字在每个单独的索引中一起,然后比较每个索引的最大总和和 return 具有最大总和的索引。
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++) {
}
但是 returns;
i // 0
9
17
19
22
NaN
i // 1
5 > NaN
i // 2
5 > NaN
i // 3
5 > NaN
如何添加每个单独的索引而不将它们全部添加在一起?
我认为您对最终解决方案非常接近,所以我不会太费心为它重新发明另一个解决方案。
基本上你需要的是一个变量,在本例中我使用了一个 object
,来包含关于当前 largest Item
和 largest item value
.[=15 的信息=]
对于每次迭代,在执行嵌套循环后,您应该知道一个项目的权重是多少。然后使用项目值,将其与当前最大值进行比较。如果它大于现有的最大,则覆盖其细节。此外,您可以使用当前项目的值增加 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);
Samuel 做得很好,我只是想添加它以获得更实用的方法和实践 (es6)。我不明白你是想要最大值的"index",还是只想要最大值。这个returns最大值
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
我正在尝试遍历一个包含使用 for 循环的字符串的数组,然后使用嵌套的 for 循环将每个单独的字符转换为数字,使用条件语句省略“-”,然后添加数字在每个单独的索引中一起,然后比较每个索引的最大总和和 return 具有最大总和的索引。
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++) {
}
但是 returns;
i // 0
9
17
19
22
NaN
i // 1
5 > NaN
i // 2
5 > NaN
i // 3
5 > NaN
如何添加每个单独的索引而不将它们全部添加在一起?
我认为您对最终解决方案非常接近,所以我不会太费心为它重新发明另一个解决方案。
基本上你需要的是一个变量,在本例中我使用了一个 object
,来包含关于当前 largest Item
和 largest item value
.[=15 的信息=]
对于每次迭代,在执行嵌套循环后,您应该知道一个项目的权重是多少。然后使用项目值,将其与当前最大值进行比较。如果它大于现有的最大,则覆盖其细节。此外,您可以使用当前项目的值增加 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);
Samuel 做得很好,我只是想添加它以获得更实用的方法和实践 (es6)。我不明白你是想要最大值的"index",还是只想要最大值。这个returns最大值
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