2016-08-25 3 views
1

Я пытаюсь выполнить итерацию по массиву со строками, использующими цикл 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 Item и largest 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 
Смежные вопросы