Вариант раз - индекс передаётся в коллбек forEach'а:
document.querySelectorAll('.item').forEach((n, i) => {
n.querySelectorAll('.card-item').forEach(m => m.textContent = `button ${i}`);
});
Два - индекс отдаёт итератор entries:
for (const [ i, n ] of document.querySelectorAll('.item').entries()) {
for (const m of n.getElementsByClassName('card-item')) {
m.innerText = 'button ' + i;
}
}
Три - самостоятельно обновляем значение переменной с индексом:
const items = document.querySelector('.parent-list').children;
for (let i = 0; i < items.length; i++) {
const subitems = items[i].querySelector('.card-list').children;
for (let j = 0; j < subitems.length; j++) {
subitems[j].innerHTML = 'button '.concat(i);
}
}