Строковый массив угловых фильтров по значению объекта

0

У меня два массива. Сначала это $scope.termini который содержит строку, а другой - $scope.reserved который содержит объекты. Каждый из объектов имеет переменную vrijemeTermina. Я хочу фильтровать $scope.termini по $scope.reserved[x].vrijemeTermina.

reserve.controller('resCtrl', function($scope, $http) {
    $scope.$watch("pickedDate", function(){
      $scope.termini=["13:00","15:00","17:00","19:00","21:00"];
        $http.post('php/dropdown.php',{"datum":$scope.pickedDate}).success(function(data){
          $scope.reserved = data;
          //alert(JSON.stringify(data));
          //alert($scope.reserved[0].datumTermina);
          angular.forEach($scope.reserved, function(value, key){
          $scope.termini = $filter('filter')($scope.termini, value.vrijemeTermina, false);
        });
      });
      console.debug("%o", $scope.termini);
      });
  });

Я пробовал так много вещей, которые не сработали. В большинстве ответов я нашел массив объектов фильтра по свойству. Я еще не нашел решение этой проблемы.

<?php
require_once(dirname(dirname(__FILE__))."/php/db-conn.php");

$data = json_decode(file_get_contents("php://input"));

$query = "SELECT * from termin WHERE datumTermina='".$data->datum."'";
$result = mysqli_query($con, $query);
$arr = array();
if(mysqli_num_rows($result) != 0) {
  while($row = mysqli_fetch_assoc($result)) {
    $arr[] = $row;
  }
}

$con->close();

echo json_encode($arr);

?>

Это мой php файл. Он возвращает json, который выглядит как {0:{"id":"1";"vrijemeTermina":"13:00";"datumTermina":"03/09/2016"}} Думаю.

  • 0
    Вам нужно внедрить сервис $filter в ваш контроллер, если вы используете только фильтр, возможно, используйте сервис filterFilter
  • 0
    @papakia Эй, приятель, спасибо за ответ, что решил одну из ошибок, которую выдала мне консоль, но не решил проблему
Показать ещё 8 комментариев
Теги:
angularjs-filter

3 ответа

0
Лучший ответ

Попробуй это:

$scope.termini = $scope.reserved.filter(function(v){
   return $scope.termini.filter(function(e){
              return e == v.vrijemeTermina
            }).length > 0;
});

Это создаст массив со всеми объектами из $scope.reserved которые имеют значение vrijemeTermina равное одному из значений из исходного массива $scope.termini.

О, я читал, что ты снова задаешь вопрос, и я думаю, что ты хочешь, чтобы это работало наоборот.

$scope.termini = $scope.termini.filter(function(v){
   return $scope.reserved.filter(function(e){ 
              return e.vrijemeTermina == v
            }).length > 0;
});
  • 0
    ошибка: v.vrijemeTermina не является функцией
  • 0
    @nytez Я редактировал свой вопрос.
Показать ещё 3 комментария
0

Вы можете получить доступ к свойству vrijemeTermina каждого объекта в цикле for так:

reserve.controller('resCtrl', function($scope, $http, filterFilter) {

    $scope.$watch("pickedDate", function() {

        $scope.termini = ["13:00","15:00","17:00","19:00","21:00"];

        $http.post('php/dropdown.php',{"datum":$scope.pickedDate})
        .then(function(response) {

            // make sure your data is parsed
            $scope.reserved = angular.fromJson(response.data);

            // check your data is an array
            if (!angular.isArray($scope.reserved)) {
                console.error("Expected $scope.reserved to be of type Array but is of type " + typeof($scope.reserved));
                return;
            }

            // loop through the array of objects
            for (var i = 0; i < $scope.reserved.length; i++) {

                // each iteration filter $scope.termini by the current objects vrijemeTermina value
                $scope.termini = filterFilter($scope.termini, $scope.reserved[i].vrijemeTermina, false);

            }

            console.debug("%o", $scope.termini);

        }, function(error) {

            // good practice to handle errors

        });

    });

});
  • 0
    Ожидается, что $ scope.reserved для типа Array, но имеет тип объекта: /
  • 0
    Итак, вы не возвращаете список объектов? Попробуйте назначить response.data в $scope.reserved , см. Мой отредактированный код
0

Как насчет чистого решения Javascript, используя filter()?

$scope.termini.filter(function(element, index, array) {

    return element == $scope.reserved[index].vrijemeTermina;

});

Это то, что вы ищете? Он вернет массив со всеми элементами из $scope.termini где соответствует соответствующее значение в $scope.reserved[i].vrijemeTermina, по индексу. Если это не то, что вы пытаетесь выполнить, не могли бы вы быть немного яснее?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню