![](/img/trans.png)
[英]With angularjs how can I show an element only when a value is not in an array?
[英]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.