2016-11-23 3 views
2

У меня есть массив объектов, как это:Angularjs Split массив объектным результате

{ 
    __v: 0, 
    _id: "5835ced6ffb2476119a597b9", 
    castvote: 1, 
    time: "2016-11-23T17:16:06.676Z", 
    userid: "57e0fa234f243f0710043f8f" 
} 

Как я могу создать новый массив, который будет фильтровать их по castvote - как массив, содержащий объекты, где castvote является 1 , и один, где castvote составляет 2?

ответ

3

Вы можете сделать это в контроллере, используя $filter,

$scope.castvoteOne = $filter('filter')($scope.results, {castvote: 1}); 
$scope.castvoteTwo = $filter('filter')($scope.results, {castvote: 2}); 

DEMO

0

Как предложил here

Вы можете использовать Underscore's groupby, чтобы сделать это в общем по типу вы хотите.

_.groupBy($scope.results, "castvote") 
1

Вы можете использовать Array.prototype.reduce и hash table группировать массив в объект с ключом в качестве значенияcastvote и как элементы, которые имеют, что особое castvote.

Теперь вы можете использовать result[castvote], чтобы получить результат для конкретного castvote

Смотреть демо ниже:

var array=[{__v:0,_id:"5835ced6ffb2476119a597b9",castvote:1,time:"2016-11-23T17:16:06.676Z",userid:"57e0fa234f243f0710043f8f"},{__v:0,_id:"5835ced6ffb2476119a597b9",castvote:2,time:"2016-11-23T17:16:06.676Z",userid:"57e0fa234f243f0710043f8f"},{__v:0,_id:"5835ced6ffb2476119a597b9",castvote:1,time:"2016-11-23T17:16:06.676Z",userid:"57e0fa234f243f0710043f8f"}] 
 

 
var result = array.reduce(function(hash){ 
 
    return function(p,c) { 
 
    if(!hash[c.castvote]) { 
 
     hash[c.castvote] = []; 
 
     p[c.castvote] = hash[c.castvote]; 
 
    } 
 
    hash[c.castvote].push(c); 
 
    return p; 
 
    }; 
 
}(Object.create(null)),{}); 
 

 
// use result[castvote] to get the result for that castvote 
 
console.log(result);
.as-console-wrapper{top:0;max-height:100%!important;}

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