Как выдавание данных JSON с Lodash

У меня есть factory, который получает данные о WebAPI, той же самой, он возвращает мне все данные, но фильтр не функционирует:

myApp.factory('Canchas', function($http){

var Canchas = {};
Canchas.list = [];

Canchas.getDataFromServer = function getDataFromServer(){
    if(!_.isEmpty(Canchas.list)) return;
    return $http.get('http://localhost:666/api/canchas/getCahchas').then(requestSuccessful, requestUnsuccessful);

    function requestSuccessful(response){
        if(_.isEmpty(response.data)) throw new Error();

        Canchas.list = response.data;
    }

    function requestUnsuccessful(){
        throw new Error();
    }
};

Canchas.getFilterCanchas = function getFilterCanchas(filtro){
  return _.filter(Canchas.list, {'data3':true});
};

return Canchas; });

У результата Json есть следующий формат:

[{
    "name": "aaa",
    "data1": true,
    "data2": false,
    "data3": true
},
{
    "name": "bbb",
    "data1": true,
    "data2": false,
    "data3": false
},
{
    "name": "ccc",
    "data1": true,
    "data2": true,
    "data3": true
}]

С controller я произвожу "фильтр", чтобы перемещать это factory и хочу получить стоимость "aaa" и "ccc", когда data1 и data3 они истинные. Я попытался с _ .filter и _ .find, но мне не удается получить результаты

myApp.controller('geoCtrl', function($scope, Canchas){

var filtro = [];

$scope.filtrodata = function(){
    filtro = _.uniqWith(filtro, _.isEqual);
    var pusher;

    if($scope.j1===true){
        $scope.insertardata({'data1':true});
    }else{
        $scope.borrardata({'data1':true});
    }

    if($scope.j2===true){
        $scope.insertardata({'data2':true});
    }else{
        $scope.borrardata({'data2':true});
    }

    if($scope.j3===true){
        $scope.insertardata({'data3':true});
    }else{
        $scope.borrardata({'data3':true});
    }

    filtro = _.uniqWith(filtro, _.isEqual);

    $scope.detalle = Canchas.getFilterCanchas(filtro);
}

$scope.insertardata = function(objeto){
    pusher = _(filtro).push(objeto);
    pusher = pusher.commit();
}

$scope.borrardata = function(objeto){
    if(_.some(filtro, objeto)) {
        _.remove(filtro, objeto);
    }
}});
2
задан 04.03.2016, 20:41
1 ответ

Синтаксис filter - следующий:

_.filter(arreglo, { "condicion": "valor" });

Ты funciГіn можешь изменять ее asГ-: (Предполагая, что уже ты получил результат в Canchas.list)

$scope.filtrodata = function(){
    var reglasFiltro = {};

    // preparas cada campo del filtro
    // los ifs no son necesarios en este caso, los removí
    reglasFiltro['data1'] = $scope.j1 === true;
    reglasFiltro['data2'] = $scope.j2 === true;
    reglasFiltro['data3'] = $scope.j3 === true;

    // obtienes todos los datos y filtras con las reglas preparadas...
    var detalles = _.filter(Canchas.list, reglasFiltro);

    // propagas a la UI
    $scope.detalle = detalles;
}

AquГ - у тебя есть пример, единственный LoDash:

var datos = [{
    "name": "aaa",
    "data1": true,
    "data2": false,
    "data3": true
},
{
    "name": "bbb",
    "data1": true,
    "data2": false,
    "data3": false
},
{
    "name": "ccc",
    "data1": true,
    "data2": true,
    "data3": true
}];

var resultado = _.filter(datos, { "data1": true, "data3": true });

console.log(resultado);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.6.1/lodash.js"></script>
0
ответ дан 24.11.2019, 14:46