2014-01-20 56 views
1

內變化,我有這些數組對象angularjs觀看

$scope.filters = { 
     1 : { 
      name : 'Pattern', 
      options : { 
       1 : { name: 'Plain', selected: false }, 
       2 : { name: 'Self Design', selected: false }, 
       3 : { name: 'Check', selected: false }, 
       4 : { name: 'Stripe', selected: false }, 
       5 : { name: 'Print', selected: false }, 
       6 : { name: 'Others', selected: false } 
      } 
     }, 
     2 : { 
      name : 'Colour', 
      options : { 
       1 : { name: 'White', selected: false }, 
       2 : { name: 'Blue', selected: false }, 
       3 : { name: 'Grey', selected: false }, 
       4 : { name: 'Pink', selected: false }, 
       5 : { name: 'Purple', selected: false }, 
       6 : { name: 'Black', selected: false }, 
       //7 : { name: 'Others', selected: false }     
      } 
     }, 
     3 : { 
      name : 'Material', 
      options : { 
       1 : { name: 'Cotton', selected: false }, 
       2 : { name: 'Technicals', selected: false }, 
       3 : { name: 'CVC', selected: false }, 
       4 : { name: 'Cotton, Two Ply', selected: false }     
      } 
     } 
    } 

怎樣用$看選擇=真正的過濾器組列表?

如果可能的話,我想結果stucture是這樣的:

{ 
Pattern : { 
    1 : Plain, 
    2 : Self Design 
}, 
Colour : { 
    1: Blue 
} 
} 

回答

1

試試這個:

var name ,options, selected = {}; 

for (var idx in $scope.filters) { 
    name = $scope.filters[idx]['name']; 
    options = $scope.filters[idx]['options']; 
    for (var i in options) { 
    if(options[i]['selected']) { 
     selected[name] = selected[name] || {}; 
     selected[name][i] = options[i]['name']; 
    } 
    } 
} 

console.log(JSON.stringify(selected,null,4)); 

/* 

{ 
    "Pattern": { 
     "1": "Plain", 
     "2": "Self Design" 
    }, 
    "Colour": { 
     "2": "Blue" 
    } 
} 

*/ 
0

看這個plunkr。不是確切的解決方案,但會給你一個開始。

我已經使用$ watch(使用objectEquality參數)來獲取更改的對象。然後,您可以使用underscore.js或純javascript來過濾所選項目。