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

时间:2014-11-27 05:43:15

标签: javascript angularjs

我在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);

        };

我想推送过滤器,如果它不可用的话。我怎样才能做到这一点。

我上面已经尝试了但是工作。什么地方出了错。 任何人都可以帮助我,

谢谢,

2 个答案:

答案 0 :(得分:2)

所以我假设$scope.data.Filters是一个具有FilterNameFilterValue属性的对象数组。

在这种情况下,通过比较对象属性的值(深度相等检查,而不是浅等式检查, indexOf()确实如此。

如果您使用lodashunderscore,则可以使用_.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);

    };