替换Angular中的对象forEach()

时间:2015-07-21 22:34:30

标签: javascript arrays angularjs

我有一个对象数组和一个forEach(),就像这个:

$scope.things = [
    {x: 2},
    {x: 4},
    {x: 5}
];

angular.forEach($scope.things, function(thing) {

    //Pick one of the lines at a time

    //thing.x += 10;         // <--- works
    //thing.k = thing.x + 1; // <--- works
    //thing = {k: thing.x + 10, o: thing.x - 1};  // <--- doesn't work

    //
});

console.log($scope.things);

我的意思是"works", "works" and "doesn't work"

  • x添加10,最终数组显示为{x: 12}, {x: 14}, {x: 15}
  • k已创建,最终数组显示为{x: 2, k: 3}, {x: 4, k: 5}, {x: 5, k: 6}
  • thing本身并未被替换,things的数组看起来与开头完全相同。

我的问题是:

  • 为什么会这样?
  • 这是预期的行为吗?
  • 如何完全替换每个thing

1 个答案:

答案 0 :(得分:1)

  

为什么会这样?

因为thing只是一个变量。您可以将变量(甚至是参数变量)的值重新分配给您想要的任何值,而不会影响对象的值。

  

这是预期的行为吗?

  

如何完全替换每个thing

如果要更改对象属性的值,则需要执行此操作。进行分配时,请参考对象及其属性名称。 value已通过keyobjobj[key] = { whatever: "you want" }。因此,您可以说angular.forEach($scope.things, function(thing, key, things) { //Pick one of the lines at a time //thing.x += 10; // <--- works //thing.k = thing.x + 1; // <--- works //thing = {k: thing.x + 10, o: thing.x - 1}; // <--- doesn't work //things[key] = {k: thing.x + 10, o: thing.x - 1}; // <--- works! }); 来更改属性值。

BeautifulSoup.find_all()