AngularJS在第一个数组中找到对象,而第二个数组中没有出现该对象

bra*_*r19 0 javascript arrays angularjs

假设我有这两个对象:

第一:

[
    {
        id: "123",
        title: "123",
        options: []
    },
    {
        id: "456",
        title: "456",
        options: [
            {
                id: "0123",
                title: "0123",
                options: []
            }
        ]
    },
    {
        id: "789",
        title: "789",
        options: []
    },
]
Run Code Online (Sandbox Code Playgroud)

第二个

[
    {
        id: "123",
        title: "123",
        options: []
    },
    {
        id: "789",
        title: "789",
        options: []
    },
]
Run Code Online (Sandbox Code Playgroud)

你可以在第二个数组中看到我错过了这个部分:

{id:"456",标题:"456",选项:[{id:"0123",标题:"0123",选项:[]}]}

如何在角度中迭代并找到缺失的元素是正确的和更好的?

sag*_*r43 5

你可以这样做

<div ng-app>
    <div ng-controller="MyCtrl">{{availableGroups}}
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

js代码

function MyCtrl ($scope) {
    $scope.groups = [
    {
        id: "123",
        title: "123",
        options: []
    },
    {
        id: "456",
        title: "456",
        options: [
            {
                id: "0123",
                title: "0123",
                options: []
            }
        ]
    },
    {
        id: "789",
        title: "789",
        options: []
    },
];

    $scope.assignedGroups = [
    {
        id: "123",
        title: "123",
        options: []
    },
    {
        id: "789",
        title: "789",
        options: []
    },
];


    $scope.availableGroups = (function () {
        var assignedGroupsIds = {};
        var groupsIds = {};
        var result = [];

        $scope.assignedGroups.forEach(function (el, i) {
          assignedGroupsIds[el.id] = $scope.assignedGroups[i];
        });

        $scope.groups.forEach(function (el, i) {
          groupsIds[el.id] = $scope.groups[i];
        });

        for (var i in groupsIds) {
            if (!assignedGroupsIds.hasOwnProperty(i)) {
                result.push(groupsIds[i]);
            }
        }

        return result;    
    }());
}
Run Code Online (Sandbox Code Playgroud)

这是工作jsFiddle

谢谢