2013-08-23 9 views
21

Ho oggetto JSON come qui di seguitoJS angolare - angular.forEach - Come ottenere la chiave dell'oggetto?

{ 
    "txt_inc_Application": { 
     "EWS": true, 
     "EWindow": true 
    }, 
    "txt_inc_IncidentType": { 
     "Brand Damage": true, 
     "Internal failure": true 
    } 
} 

E sto usando angular.forEach per ottenere i valori

$scope.filterFormula=function() { 
    angular.forEach($scope.filters, function(filterObj , filterIndex) { 
     angular.forEach(filterObj, function(value , key) { 
      console.log(value+"--"+key) 
     }) 
    }) 
} 

Come posso ottenere "txt_inc_Application" e "txt_inc_IncidentType" nel ciclo?

Anche quando si chiama la funzione angolare in html come sotto perché viene eseguita due volte?

{{filterFormula()}} 

enter image description here

+0

provare $ scope.filterFormula = function() { angular.forEach ($ scope.filters, function (filterObj, filterIndex) { angular.forEach (filterObj, function (value, key) { console.log (filterIndex) }) }) } – TyrHunter

+1

I binding vengono chiamati almeno una volta per ciclo di apply-digest. AngularJS continua a controllare tutti i binding fino a quando nulla è cambiato in un ciclo. Quindi, se controlla 'filterFormula', e qualcosa nel modello cambia nello stesso ciclo, verrà chiamato di nuovo! E di nuovo! E di nuovo! Fino a 10 volte finché non si ottiene l'errore '10 $ digest iterations reached'. –

+0

Grazie. Silly me. Non so perché l'ho ignorato. Qualche idea sul perché la funzione filterFormula venga eseguita due volte? Posso vedere console .log viene stampato due volte. – Saravanan

risposta

46

Il primo parametro all'iteratore in forEach è il valore e la seconda è la chiave dell'oggetto.

angular.forEach(objectToIterate, function(value, key) { 
    /* do something for all key: value pairs */ 
}); 

Nel tuo esempio, il forEach esterno è in realtà:

angular.forEach($scope.filters, function(filterObj , filterKey) 
2
var obj = {name: 'Krishna', gender: 'male'}; 
angular.forEach(obj, function(value, key) { 
    console.log(key + ': ' + value); 
}); 

cede gli attributi di obj con i rispettivi valori:

name: Krishna 
gender: male 
+2

Fornisci spiegazioni anche per il codice. –

+4

Benvenuti in Stack Overflow! Sebbene questo snippet di codice sia benvenuto e possa fornire un aiuto, sarebbe [notevolmente migliorato se includesse una spiegazione] (// meta.stackexchange.com/q/114762) di * come * e * perché * questo risolve il problema . Ricorda che stai rispondendo alla domanda per i lettori in futuro, non solo la persona che chiede ora! Si prega di [modificare] la risposta per aggiungere una spiegazione e fornire un'indicazione di quali limitazioni e ipotesi si applicano. –

Problemi correlati