Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript For循环次数过多_Javascript_For Loop - Fatal编程技术网

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
中。啊,我现在明白了。感谢您的拼写。啊,我现在明白了。谢谢您的拼写。