繁体   English   中英

如何在javascript数组元素中显示正确的值?

[英]How can I show the correct value in a javascript array element?

在以下代码中,我创建一个汽车对象并通过增加计数来修改元素。 每次修改汽车时,都会将其推入名为yada的数组。 最后,我访问了放置在yada阵列上的第3辆车,以查看计数是多少,但它报告的计数为6,而不是我期望的3。

<html>
<body>
<script>

var car = {limit:4, count:0, trigger:0};
var yada = new Array();

for(var i=0; i<6; i++)
{
    car.count += 1;
    if(car.count >= car.limit)
    {
        car.trigger = 1;

    }
    yada.push(car);
    alert(car.count+" "+car.limit+" "+car.trigger);
};

alert(yada[2].count + " TEST ");

</script>
</body>
</html>

了解按值传递和按引用传递之间的区别很重要: JavaScript是按引用传递还是按值传递语言?

Javascript的默认值始终是按值传递,但对于对象,变量的值是引用。 因此,当您传递一个对象并更改其成员时,这些更改会在函数外部持续存在。

您可以通过在for循环中创建一个新的汽车对象来适应:

<html>
<body>
<script>


var yada = new Array();

for(var i=0; i<6; i++)
{
    let car = {limit:4, count:0, trigger:0};
    car.count = i+1;
    if(car.count >= car.limit)
    {
        car.trigger = 1;

    }
    yada.push(car);
    alert(car.count+" "+car.limit+" "+car.trigger);
};

alert(yada[2].count + " TEST ");

</script>
</body>
</html>

因为您将car声明为局部变量,所以它不会在循环外持久存在,因此您会在每个循环运行中创建一个新变量,然后将其存储在数组中。

这对我有用。

每次只能将一个car对象推入数组,因此yada所有6个条目yada指向同一个汽车对象,并且其中任何一个的更改都会反映在所有“指针”或数组条目中。

您循环遍历car.count并递增6次,完成循环后,您将访问数组中的car count ,它指向同一car对象,现在car.count等于6,这就是您所看到的。 无论您访问哪个数组索引,都将得到相同的结果。

也许,您想创建多个car对象,请查看https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/new

您的构造函数可能看起来像这样:

function Car() {
    this.limit = 4;
    this.count = 0;
    this.trigger = 0;
}

然后,要创建一个新的car对象,您可以说:

var myCar = new Car();

您的阵列中只有一辆car具有多个引用。 您需要从当前car创建一个新对象。

 var car = {limit:4, count:0, trigger:0}; var yada = new Array(); for(var i=0; i<6; i++) { car.count += 1; if(car.count >= car.limit) { car.trigger = 1; } yada.push(Object.assign({},car) ); }; console.log(yada); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM