Это приблизит вас:
const editProduct = id => {
const length = sessionStorage.getItem("valuesArray").length;
let query = "UPDATE `products` SET id='"+id+"', ";
// querySelectorAll returns a NodeList. Convert to Array:
const labels = Array.from(document.querySelectorAll("label"))
const labelsText = labels.map(label => label.innerHTML)
console.log(labels.join(', '))
alert(query);
}
Проблема с вашим кодом заключается в том, что вы выполняете итерацию, используя длину массива, полученную из localstorage, но нет гарантии, что длина этого массива такое же, как количество элементов метки на странице, и кажется, что в массиве больше элементов, чем элементов метки.
Вместо этого следует перебрать коллекцию, возвращаемую document.querySelectorAll("label")
.
Я рекомендую вам выучить Array.map
и Array.filter
. Они безопаснее и их легче рассуждать, чем циклы.
Ваше намерение неясно в вашем коде, но если вы хотите "получить количество элементов метки, равное Math.min(labels.length, valuesArray.length)
", то вы хотите сделать что-то вроде:
const editProduct = id => {
const length = sessionStorage.getItem("valuesArray").length;
let query = "UPDATE `products` SET id='"+id+"', ";
const labels = Array.from(document.querySelectorAll("label")) || [];
const numberOfElementsToGet = Math.min(labels.length, length) - 1;
const elementsToGet = labels.slice(0, numberOfElementsToGet)
const labelsText = elementsToGet.map(label => label.innerHTML)
console.log(labels.join(', '))
alert(query);
}