У меня есть массив объектов и 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
?Почему это происходит?
Потому thing
- просто переменная. Вы можете переназначить значение переменной (даже переменной параметра) для того, что хотите, не влияя на значения объекта.
Это ожидаемое поведение?
да
Как я могу полностью заменить каждую
thing
?
Если вы хотите изменить значение свойства объекта, вам нужно сделать именно это. Ссылка на объект и его имя свойства при выполнении задания. Функция forEach
iterator передается 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!
});