Javascript For循环次数过多
我有一些代码:Javascript For循环次数过多,javascript,for-loop,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.
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]);
}
var-cart=[];
var项目=[];
var cart_node=document.querySelectorAll('#tLiteraryModuleStateDetail>tbody>tr');
var cart_as_array=array.prototype.slice.call(cart_节点,2);//从第3(2)项开始
对于(var i=0;i您首先将cart
数组的第i个元素设置为您的对象,然后将其推到末尾;这将放入两个副本,如您所见
编辑评论中的问题:
让我们逐行检查您的代码:
for(i=0; i < items.length; i++) {
// set vars
cart[i] = {};
现在,cart[i]
上的对象已经收到了您构建的属性。cart
数组现在在i
位置包含一个具有这些名称、价格和品牌属性的对象
// add to cart array
cart.push(cart[i]);
现在,除了i
处的引用之外,您还将对存储在i
处的对象的第二个引用推到了数组的末尾。这将产生您正在观察的行为:对象将在数组中出现两次
我建议更改cart[I]={}
(以及添加此对象属性的关联代码)要在对象存储在局部变量中时构造该对象,请将其推送到循环末尾的数组。首先将购物车数组的第i个元素设置为对象,然后将其推到末尾;如您所见,这将放入两个副本
编辑评论中的问题:
让我们逐行检查您的代码:
for(i=0; i < items.length; i++) {
// set vars
cart[i] = {};
现在,cart[i]
上的对象已经收到了您构建的属性。cart
数组现在在i
位置包含一个具有这些名称、价格和品牌属性的对象
// add to cart array
cart.push(cart[i]);
现在,除了i
处的引用之外,您还将对存储在i
处的对象的第二个引用推到了数组的末尾。这将产生您正在观察的行为:对象将在数组中出现两次
我建议更改cart[I]={}
(以及添加此对象属性的关联代码)来构造存储在局部变量中的对象,然后将其推送到循环末尾的数组中。在代码的第3行,您在数组中创建了一个空对象:
cart[i] = {};
然后在第14行再次将该对象推入数组:
相反,您应该只创建一个对象,并在末尾推动它:
var item = {};
// ... add properties to item ...
cart.push(item)
在代码的第3行,您在数组中创建了一个空对象:
cart[i] = {};
然后在第14行再次将该对象推入数组:
相反,您应该只创建一个对象,并在末尾推动它:
var item = {};
// ... add properties to item ...
cart.push(item)
事实上,它们不是复制品。它们都指向同一个对象。我很抱歉,对于看过这篇文章的人来说,这一定很明显。我不明白though@Barmar当前位置是的,这里的副本太草率了;我应该说是两份references@DougFirr:cart[i]={}
将对象分配到cart
的索引i
(在您的示例中,索引0
),然后是cart.push(cart[i])
将同一个对象附加到同一个数组中,因此现在它也被保存在索引1
中。实际上,它们不是副本。它们都指向同一个对象。很抱歉,对于看过这篇文章的人来说,这一定很明显。我不明白though@Barmar当前位置是的,这里的副本太草率了;我应该说是两份references@DougFirr:cart[i]={}
将对象分配给cart
的索引i
(在您的示例中,索引0
),但随后cart.push(cart[i])
将同一对象附加到同一数组中,因此现在它也保留在索引1
中。啊,我现在明白了。感谢您的拼写。啊,我现在明白了。谢谢您的拼写。