Я пытаюсь динамически создавать элементы DOM, которые отображают каждое значение объекта для всех объектов в массиве.
Я использовал цикл for для создания элементов и пытался сопоставить итерации содержимого с итерациями массива, но это не сработало. Ниже приведен мой код (это упрощенная версия, чтобы код работал).
let divTwo = document.querySelector('.div-two');
let bigArray = [{
first: 'Joe',
location: 'Washington'
},
{
first: 'Jon',
location: 'Boston'
},
{
first: 'Brian',
location: 'New York'
},
];
let smallArray = ['first', 'location'];
function addNames() {
for (let i = 0; i < bigArray.length; i++) {
for (let j = 0; j < smallArray.length; j++) {
let newSpan = document.createElement('span');
newSpan.id = 'spanny' + (j + 1);
divTwo.appendChild(newSpan);
document.getElementById('spanny1').textContent = bigArray[j].first;
document.getElementById('spanny2').textContent = bigArray[j].location;
// newSpan[0].textContent = bigArray[0].first; *also doesn’t work*
// newSpan[1].textContent = bigArray[0].location; *also doesn’t work*
}
}
}
addNames();



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы действительно не хотите добавлять эти идентификаторы в <span>, так как каждый из них будет появляться на вашей странице три раза, что недопустимо.
Вы, вероятно, ищете что-то вроде этого. Вы хотите получить i-й элемент bigArray, а затем получить значение, связанное с ключом, заданным j-м элементом в smallArray. Так что используйте bigArray[i][smallArray[j]].
function addNames() {
for (let i = 0; i < bigArray.length; i++) {
for (let j = 0; j < smallArray.length; j++) {
let newSpan = document.createElement("span");
divTwo.appendChild(newSpan);
newSpan.textContent = bigArray[i][smallArray[j]];
}
}
}
Это чище с использованием ECMAScript 6+:
function addNames() {
bigArray.forEach((data) => divTwo.append(...smallArray.map((key) => Object.assign(document.createElement("span"), {
textContent: data[key]
}))));
}