Javascript array.push заменяет ранее добавленные элементы - PullRequest
0 голосов
/ 05 июля 2019

Я заполняю массив объектами.Каждый раз, когда цикл for повторяется, он обновляет предыдущие элементы массива.

Я пробовал с различными типами циклов, такими как for-each, for и for of.

var arrResult = new Array;

for (let element of accessoriesToDisplay) {
    var obj = {};
    var obj = await AdaptiveCardImporter.accessoryCard(element.Name,
     element.Price, element.ProductDescription, element.URL, element.ImgURL);
    arrResult.push(obj);
}

Этот массив должен иметь 3 разных объекта в конце, а не массив, заполненный только последним.Этот код работал до того, как я переместил метод accessoryCard за пределы основного файла js.

Watcher:

Loop-1

Loop-2

Loop-3

1 Ответ

0 голосов
/ 05 июля 2019

Вы код концепции хорошо. Ваш код должен выполняться нормально, но ваша проблема связана с вашим ожиданием - что-то там не так. Например, это воссоздание вашего кода работает:

const getObj = e => new Promise(resolve => setTimeout(() => resolve({val:e}), 300))

async function main() {
  var arrResult = []
  var accessoriesToDisplay = [1, 2, 3]


  for (let element of accessoriesToDisplay) {
    var obj = await getObj(element)
    console.log(obj)
    arrResult.push(obj);
  }
  
  console.log(arrResult)
}

main()

Но ваш код - нет. Попробуйте console.log(JSON.stringify(obj)) на каждой итерации цикла, чтобы проверить, действительно ли возвращаемый объект является тем объектом, который вы ищете - chrome любит помогать, автоматически обновляя значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...