У меня два массива. Сначала это $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"}}
Думаю.
Попробуй это:
$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;
});
Вы можете получить доступ к свойству 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
});
});
});
response.data
в $scope.reserved
, см. Мой отредактированный код
Как насчет чистого решения Javascript, используя filter()?
$scope.termini.filter(function(element, index, array) {
return element == $scope.reserved[index].vrijemeTermina;
});
Это то, что вы ищете? Он вернет массив со всеми элементами из $scope.termini
где соответствует соответствующее значение в $scope.reserved[i].vrijemeTermina
, по индексу. Если это не то, что вы пытаетесь выполнить, не могли бы вы быть немного яснее?
$filter
в ваш контроллер, если вы используете только фильтр, возможно, используйте сервисfilterFilter