Замена объектов внутри forEach () Angular [duplicate]

0

У меня есть массив объектов и 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
    Проверьте это сообщение: stackoverflow.com/questions/12482961/… ... Там есть все ответы, которые вы ищете.
  • 0
    @Mindastic - Да. Даже когда я написал свой ответ ниже, я подумал про себя: «Конечно, это дубликат. Здесь уже где-то должен быть ответ». Спасибо, что нашли это.
Теги:
arrays

1 ответ

1
Лучший ответ

Почему это происходит?

Потому 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!
});

Ещё вопросы

Сообщество Overcoder
Наверх
Меню