javascript - For 循环循环次数过多

标签 javascript for-loop

我有一些代码:

var cart = [];
var items = [];
var cart_node = document.querySelectorAll('#tblItineraryModuleStayDetail > tbody > tr');
var cart_as_array = Array.prototype.slice.call(cart_node, 2); // start at item 3 (2)
for(var i=0;i<cart_as_array.length;i+=2) {
    items.push(cart_as_array[i]);
}

现在,在控制台中,如果我输入我得到的项目:

enter image description here

所以我希望在这种情况下循环会循环一次。

这是我的循环:

for(i=0; i < items.length; i++) {
    // set vars
    cart[i] = {};
    var name = items[i].querySelector('.txtStayRoomDescription').textContent;
    var price = items[i].querySelector('.tblItinPriceSummary tr td:last-child').textContent;
    var brand = items[i].querySelector('.txtStayRoomLocation').textContent;

    // add to object
    cart[i].name = name;
    cart[i].price = price;
    cart[i].brand = brand;

    // add to cart array
    cart.push(cart[i]);
  }

这给出:

enter image description here

我期望数组购物车的结果包含一个项目对象而不是两个。但它有两个相同的对象。

这是怎么回事?

最佳答案

您首先将cart数组的第i个元素设置为您的对象,然后将其推到末尾;如您所见,这将放入两份副本。

编辑评论中的问题:

让我们逐行浏览一下您的代码:

for(i=0; i < items.length; i++) {
    // set vars
    cart[i] = {};

cart[i] = {} 将一个空对象放入 cart 数组中的索引 i 处之后;如果之前有东西,它将被覆盖,否则数组将被简单地添加。

// stuff setting properties removed

// add to object
cart[i].name = name;
cart[i].price = price;
cart[i].brand = brand;

现在,cart[i] 处的对象已收到您构造的属性。 cart 数组现在在位置 i 处包含一个具有这些名称、价格和品牌属性的对象。

// add to cart array
cart.push(cart[i]);

现在,除了 i 处的引用之外,您还将对存储在 i 处的对象的第二个引用推送到数组的末尾。这将产生您正在观察的行为:该对象将在数组中出现两次。

我建议更改cart[i] = {}(以及添加该对象属性的相关代码)以构造该对象,同时将其存储在局部变量中,然后将其推送到循环末尾的数组。

关于javascript - For 循环循环次数过多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29400053/

相关文章:

c++ - Do...While 循环可能带有临时变量的 if ...else 语句

javascript - 在鼠标悬停时突出显示文本行

javascript - 悬停时如何增加多行文本的下划线宽度

javascript - JQuery + setTimeout 不起作用

python 循环导入并检查变量

c++ - for循环中的随机数生成器每次都给出相同的数字

for-loop - 与引用向量相比,将向量传递到 `for`循环是什么意思?

python - 如何用另一个列表中的字典值填充一个列表中的字典值?

javascript - Testcafe 抛出错误 invalid arg type

javascript - 显示 div 标签内输入的 webstorage 值