2016-07-21 2 views
-2

У меня есть этот сложный массив объектов (я покажу только те узлы, необходимые для объяснения проблемы):Javascript массив объектов, не изменяя

var arr = [ 
    { 
     json: { 
       doc: { 
        id: 1, 
        atualizacao:{ 
           dc: false 
        } 
       } 
     } 
    } 
] 

angular.forEach(arr, function(value, key) { 
    if(value.json.doc.id == 1){ 
     value.json.doc.atualizacao.dc = true; 
    } 
}); 

Когда я делаю это Foreach, он изменяет значение из 'dc' узла массива в определенной позиции. но в конце forEach массив arr все еще не изменился.

Я положил много console.logs и выяснил, что:

  • если я войти в переменном: value.json.doc.atualizacao.dc - ПОЯВЛЕНИЕ 'истинного'

  • ; если я войти в переменном: value.json.doc.atualizacao - ПОЯВЛЕНИЕ 'dc = истинный'

  • если я войти в переменном: value.json.doc - ПОЯВЛЕНИЕ «atualizacao.dc = верно '

  • если я войти в переменную: value.json - ПОЯВЛЕНИИ 'doc.atualizacao.dc = ложь'

  • если я регистрировать значение переменной - ПОЯВЛЕНИИ 'json.doc.atualizacao.dc = ложь'

+0

Можете ли вы дать нам [Plunker] (http://plnkr.co/), показывающий ошибку? Это очень поможет в попытке дублировать проблему. –

+0

Это должно работать нормально, просто протестировать его в консоли (используя 'arr.forEach' вместо' angular.forEach') – konkked

+0

см. [Почему используется «для ... в» с итерацией массива плохая идея?] (Http: //stackoverflow.com/questions/500504/why-is-using-for-in-with-array-iteration-a-bad-idea) –

ответ

0

его изменение, посмотрите здесь: Plunker

в angular.forEach вы можете передать только значение для функции.

взглянет в вышеприведенной plunker, надеется, что это помогает

+0

Самое невероятное, что за исключением параметров на угловую функцию для каждого, код такой же, как у меня. Но он все еще не работает для меня (даже удаляя этот второй параметр) Вот «скриншот» моего кода (немного сложнее), который НЕ РАБОТАЕТ. [скриншот] (http://imgur.com/a/Fs5Ip) academia - это "arr" –

0

Я уже начинаю не думаю, что это проблема с $ rootScope. На самом деле объект намного сложнее, большой и «тяжелый», чем тот, который я разместил выше. Я думаю, что когда я изменяю его значение на true, в конце forEach он все еще «применяет» мои изменения. Вот почему, когда я регистрирую PART объекта, он показывает true, и когда я регистрирую корневой объект, он показывает false. Это, по крайней мере, будет иметь смысл.

Смежные вопросы