我在JS中有以下模型。我正在使用角度js
$scope.data = {
FocusOn: " ",
Filters: [],
Range: {
From: "",
To: ""
}
}
我有以下功能:
$scope. addField = function ($type, $value) {
$scope.data1 = {
FilterName: $type,
FilterValue: $value
};
if ($scope.data.Filters[$type] === undefined) {
$scope.data.Filters.push($scope.data1);
}
$scope.data1 = "";
$scope.Json = angular.toJson($scope.data);
};
我想推送过滤器,如果它不可用的话。我怎样才能做到这一点。
我上面已经尝试了但是工作。什么地方出了错。 任何人都可以帮助我,
谢谢,
答案 0 :(得分:2)
所以我假设$scope.data.Filters
是一个具有FilterName
和FilterValue
属性的对象数组。
在这种情况下,通过比较对象属性的值(深度相等检查,而不是浅等式检查, indexOf()
确实如此。
如果您使用lodash或underscore,则可以使用_.findWhere()
帮助程序轻松完成此操作:
if (!_.findWhere($scope.data.Filters, $scope.data1)) {
$scope.data.Filters.push($scope.data1);
}
否则,您可以创建自己的函数,因此完整的代码如下所示:
$scope.addField = function ($type, $value) {
$scope.data1 = {
FilterName: $type,
FilterValue: $value
};
if (!filterExists($type)) {
$scope.data.Filters.push($scope.data1);
}
$scope.data1 = "";
$scope.Json = angular.toJson($scope.data);
};
function filterExists(type) {
for (var i = 0, len = $scope.data.Filters.length; i < len; i++) {
if ($scope.data.Filters[i].FilterName === type)
return true;
}
return false;
}
答案 1 :(得分:0)
试试:
$scope.addField = function ($type, $value) {
$scope.data1 = {
FilterName: $type,
FilterValue: $value
};
if ($scope.data.Filters[$type] == undefined) {
$scope.data.Filters[$type] = $scope.data1;
}
$scope.data1 = "";
$scope.Json = angular.toJson($scope.data);
};