更改数组中每个项目的属性?

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 循环上的一种糖。您可以使用任何其他数组方法(mapfilter 等),但您不会正确使用它们。 我正在寻找最有效的方法。这是一个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。也可以是forEachfilter 我不同意,它是如何滥用地图的?我们从一组开始,然后将其转换为新的一组。这就是地图的用途。 在您进行编辑之前,您使用 map 专门是因为它能够迭代集合。您最近的编辑实际上将它变成了一个数字数组。 地图在哪里有用? @Davita map 用于从旧集创建新集。例如,假设您有一个数字数组,并且想要将它们全部平方。然后你可以做var squared = numbers.map(x =&gt; 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?。

【讨论】:

以上是关于更改数组中每个项目的属性?的主要内容,如果未能解决你的问题,请参考以下文章

设置对象数组中每个项目的属性(C#,Regex.Split())

转换 DataRow 项目数组的特定元素?

按不同数组中设置的属性类型分隔项目

Vue 无法更改嵌套 v-for 中的属性

根据可见属性更改 ListView 的高度

没有为项目设置OutputPath属性... / VS任意更改解决方案中的项目配置从Debug到Release