Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果数组对象中不存在,则推送_Javascript_Angularjs - Fatal编程技术网

Javascript 如果数组对象中不存在,则推送

Javascript 如果数组对象中不存在,则推送,javascript,angularjs,Javascript,Angularjs,我有下面的JS模型。我使用的是角js $scope.data = { FocusOn: " ", Filters: [], Range: { From: "", To: "" } } 我有以下功能: $scope. addField = function ($type, $value) { $sc

我有下面的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);

        };
如果过滤器不可用,我想按下它。我怎样才能做到这一点

我试过上面的方法,但效果不好。出了什么问题。 谁能帮帮我吗

谢谢,

试试看:

$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);

    };

因此,我假设
$scope.data.Filters
是一个具有
FilterName
FilterValue
属性的对象数组

在这种情况下,您实际上需要在插入之前搜索数组,通过比较对象属性的值(深度相等检查,而不是浅相等检查,后者是
indexOf()

如果使用或,则可以使用
.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;
}
$scope.addField=函数($type,$value){
$scope.data1={
过滤器名称:$type,
FilterValue:$value
};
如果(!filterExists($type)){
$scope.data.Filters.push($scope.data1);
}
$scope.data1=“”;
$scope.Json=angular.toJson($scope.data);
};
函数筛选器存在(类型){
对于(变量i=0,len=$scope.data.Filters.length;i
只是一个提示:在函数参数前面加上
$
会让其他开发人员感到困惑。使用AngularJS时,只有核心角度函数的前缀是
$
,因此您知道什么是核心AngularJS功能,以及您的代码是什么。@GregL知道了。Thanks@Backtrack如果答案对你有用,别忘了接受。