我有一个对象数组和一个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
?答案 0 :(得分:1)
为什么会这样?
因为thing
只是一个变量。您可以将变量(甚至是参数变量)的值重新分配给您想要的任何值,而不会影响对象的值。
这是预期的行为吗?
是
如何完全替换每个
thing
?
如果要更改对象属性的值,则需要执行此操作。进行分配时,请参考对象及其属性名称。 value
已通过key
,obj
和obj[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()