【问题标题】: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 感谢您的帮助。你最清楚地回答了我的问题。

标签: javascript jquery arrays foreach for-in-loop


【解决方案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?

    【讨论】:

      猜你喜欢
      • 2011-04-21
      • 1970-01-01
      • 2021-08-26
      • 2017-08-23
      • 2020-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多