更改数组中每个项目的属性?
Posted
技术标签:
【中文标题】更改数组中每个项目的属性?【英文标题】:Change properties of every item in an array? 【发布时间】:2016-06-23 02:27:54 【问题描述】:我需要设置这个数组中每一项的值,向上计数。
例如,path[0].value = 1、path[1].value = 2 等等...
编辑:我正在寻找最有效的方法。
我认为 for 循环是最好的方法,但我想学习其他方法。可以用 map() 方法或 forEach() 来完成吗?那么 for... in 语句呢?我想用纯 JS 来做,但如果你能教我一个更好的 jQuery 方法,我也有兴趣学习。
提前致谢。
function Cell(x,y)
this.xCoordinate = x;
this.yCoordinate = y;
this.value;
var path = [new Cell(0,0), new Cell(0,1), new Cell(0,2)];
【问题讨论】:
为什么不使用简单的常规for
循环 -> for ( var i=0; i<100; i++ ) path.push( new Cell(0, i) ) ;
forEach
只是for
循环上的一种糖。您可以使用任何其他数组方法(map
、filter
等),但您不会正确使用它们。
我正在寻找最有效的方法。这是一个for循环吗?
@Davita 是的,for
循环总是比函数调用更有效。
@MikeC 感谢您的帮助。你最清楚地回答了我的问题。
【参考方案1】:
<html>
<body>
<p id="demo"></p>
<script>
function Cell(x,y)
this.xCoordinate = x;
this.yCoordinate = y;
this.value;
function setValues(element, index, array)
array[index].value = index+1;
var path = [new Cell(0,0), new Cell(0,1), new Cell(0,2)];
path.forEach(setValues);
document.getElementById("demo").innerHTML = path[2].value;
</script>
</body>
</html>
【讨论】:
这更多与显示有关。我的脚本依赖于每个单元格的值。 你是对的。根据您的问题,我公开了一个使用 forEach 的示例。【参考方案2】:如果你有一个现有的数组,你可以使用 map。
var path = [0,1,2].map( x => new Cell(0, x))
或变异
path = path.map( x =>
x.value = x.yCoordinate - 1
return x
)
【讨论】:
第二个就是滥用map
。也可以是forEach
或filter
。
我不同意,它是如何滥用地图的?我们从一组开始,然后将其转换为新的一组。这就是地图的用途。
在您进行编辑之前,您使用 map
专门是因为它能够迭代集合。您最近的编辑实际上将它变成了一个数字数组。
地图在哪里有用?
@Davita map
用于从旧集创建新集。例如,假设您有一个数字数组,并且想要将它们全部平方。然后你可以做var squared = numbers.map(x => x * x)
。它为原始数组中的每个元素创建一个新数组,其中新值是您传递给它的函数返回的值。【参考方案3】:
一个简单的 for 循环应该可以工作:
var path = [],
len = 10;
for (
var idx = 0;
idx < len;
path.push(new Cell(0,++idx))
)
【讨论】:
【参考方案4】:您可以使用for
循环或forEach
:
for(var i=0; i<path.length; ++i)
path[i].value = i+1;
path.forEach(function(cell, i)
cell.value = i + 1;
);
最好避免for...in
,因为Why is using “for…in” with array iteration such a bad idea?。
【讨论】:
以上是关于更改数组中每个项目的属性?的主要内容,如果未能解决你的问题,请参考以下文章