#javascript #arrays
#javascript #массивы
Вопрос:
Следуя моему коду javascript ниже:
function ready() {
var items = document.querySelectorAll('.item')
var data = [];
for (var i = 0; i < items.length; i ) {
var current = items[i];
var name = current.getElementsByClassName('item-title')[0].innerText;
var price = parseInt(current.getElementsByClassName('item-price')[0].innerText);
var products = {};
products.title = name;
products.cost = price;
data.push(products);
console.log(data)
}
Я получаю результат ниже:
[{title: "Jack Daniels 1L", cost: 60}] (1)
[{title: "Jack Daniels 1L", cost: 60}, {title: "Southern Comfort 2L", cost: 130}] (2)
[{title: "Jack Daniels 1L", cost: 60}, {title: "Southern Comfort 2L", cost: 130}, {title: "Golden Label 1L", cost: 120}] (3)
[{title: "Jack Daniels 1L", cost: 60}, {title: "Southern Comfort 2L", cost: 130}, {title: "Golden Label 1L", cost: 120}, {title: "Grey Goose 1L", cost: 31}] (4)
[{title: "Jack Daniels 1L", cost: 60}, {title: "Southern Comfort 2L", cost: 130}, {title: "Golden Label 1L", cost: 120}, {title: "Grey Goose 1L", cost: 31}, {title: "Remy Martins 750ml", cost: 45}] (5)
[{title: "Jack Daniels 1L", cost: 60}, {title: "Southern Comfort 2L", cost: 130}, {title: "Golden Label 1L", cost: 120}, {title: "Grey Goose 1L", cost: 31}, {title: "Remy Martins 750ml", cost: 45}, {title: "Hennessy 1L", cost: 68}] (6)
[{title: "Jack Daniels 1L", cost: 60}, {title: "Southern Comfort 2L", cost: 130}, {title: "Golden Label 1L", cost: 120}, {title: "Grey Goose 1L", cost: 31}, {title: "Remy Martins 750ml", cost: 45}, {title: "Hennessy 1L", cost: 68}, {title: "Johnnie Walker 1L", cost: 50}] (7)
[{title: "Jack Daniels 1L", cost: 60}, {title: "Southern Comfort 2L", cost: 130}, {title: "Golden Label 1L", cost: 120}, {title: "Grey Goose 1L", cost: 31}, {title: "Remy Martins 750ml", cost: 45}, {title: "Hennessy 1L", cost: 68}, {title: "Johnnie Walker 1L", cost: 50}, {title: "Double Black 750ml", cost: 55}] (8)
С каждой итерацией в последующий массив добавляется еще один объект, что означает, что только последний массив содержит все, что требуется. Можно ли настроить таргетинг на конкретный массив, который приводит к восьмому циклу, и записать его отдельно в качестве результата? т.е. этот конкретный массив:
[{title: "Jack Daniels 1L", cost: 60}, {title: "Southern Comfort 2L", cost: 130}, {title: "Golden Label 1L", cost: 120}, {title: "Grey Goose 1L", cost: 31}, {title: "Remy Martins 750ml", cost: 45}, {title: "Hennessy 1L", cost: 68}, {title: "Johnnie Walker 1L", cost: 50}, {title: "Double Black 750ml", cost: 55}] (8)
Комментарии:
1. Пожалуйста, сделайте отступ в своем коде. Я не понимаю вопроса «Возможно ли настроить таргетинг на конкретный массив»? В вашем коде есть только один цикл, и он начинается с 0, вы могли бы начать его с 8-го элемента с переменной i = 7, если это то, что вы спрашиваете.
2. Я не уверен, в чем заключается ваш вопрос. Вы пытаетесь войти в систему после N элементов или после завершения всего цикла? Если последнее, поместите оператор log вне цикла. Если первое, знаете ли вы, что такое N каждый раз? Если да, просто проверьте, (i == N) . Если нет, как вы узнаете, какой вы хотите?
3. Просто переместите за
console.log()
пределы цикла for
Ответ №1:
Попробуйте так:
function ready() {
var items = document.querySelectorAll('.item');
var data = [];
for (var i = 0; i < items.length; i ) {
var current = items[i];
var name = current.getElementsByClassName('item-title')[0].innerText;
var price = parseInt(current.getElementsByClassName('item-price')[0].innerText);
var products = {};
products.title = name;
products.cost = price;
data.push(products);
//if you want to see what data looks like on the 8th iteration specifically, console.log with an if condition:
if(i === 7) {
console.log(data);
};
};
//if you want to see what data looks like after the loop, console.log here:
console.log(data);
//...
};
Ответ №2:
Если вы переместите console.log() чуть ниже цикла for , вы увидите, что существует только один массив, который содержит все введенные значения. Нет необходимости вообще изменять поведение массива.
Ответ №3:
Вы можете использовать if
оператор для выбора итерации, которую следует добавить:
for (var i = 0; i < items.length; i ) {
if (i === 7)
{
var current = items[i];
var name = current.getElementsByClassName('item-title')[0].innerText;
var price = parseInt(current.getElementsByClassName('item-price')[0].innerText);
var products = {};
products.title = name;
products.cost = price;
data.push(products);
console.log(data)
}
}
Оператор if выполняет оператор, если указанное условие соответствует действительности. Если условие неверно, может быть выполнен другой оператор.
Комментарии:
1. При такой скорости нет смысла использовать цикл for . Просто выполните операцию один раз над элементами [7].
2. @David может быть, было бы полезно, если OP захочет работать с другими индексами. Кроме того, это предотвращает передачу
undefined
значения, если массив не имеет такого индекса