Angularjs将数组映射到另一个数组

Rya*_*lay 2 javascript arrays angularjs

我有两个数组,像这样的用户雇员:

Users       = [{id:1, name: "ryan"}, {id:2, name:"Julie"}]
Employments = [{user_id: 1, title: "manager"}, {user_id: 2, title: "Professor"}]
Run Code Online (Sandbox Code Playgroud)

我想在ng-repeat中显示Employments数组,如下所示:

<li ng-repeat="employment in Employments">
  {{employment.user.name}}
</li>
Run Code Online (Sandbox Code Playgroud)

如何将Users数组映射到Employments数组?

Nid*_*nan 5

如果您希望根据id显示员工姓名,最简单的方法就是将该ID传递给函数并返回名称,如下所示

工作演示

HTML

<div ng-app='myApp' ng-controller="ArrayController">
    <li ng-repeat="employment in Employments">{{getEmployeeName(employment.user_id)}}
    </li>
</div>
Run Code Online (Sandbox Code Playgroud)

脚本

var app = angular.module('myApp', []);
app.controller('ArrayController', function ($scope) {
    $scope.Users = [{
        id: 1,
        name: "ryan"
    }, {
        id: 2,
        name: "Julie"
    }];

    $scope.Employments = [{
        user_id: 1,
        title: "manager"
    }, {
        user_id: 2,
        title: "Professor"
    }];

    $scope.getEmployeeName = function (empId) {
        for (var i = 0; i < $scope.Users.length; i++) {
            if ($scope.Users[i].id === empId) {
                return $scope.Users[i].name;
            }
        };
    };
});
Run Code Online (Sandbox Code Playgroud)

更新2

如果要将User数组嵌入Employments数组中,请尝试以下操作

$scope.Users = [{id: 1, name: "ryan"}, {id: 2, name: "Julie"}];

$scope.Employments = [{user_id: 1, title: "manager"}, 
                      {user_id: 2, title: "Professor"}
                     ];
Run Code Online (Sandbox Code Playgroud)

通过添加用户属性来展平Employments数组的代码

angular.forEach($scope.Users, function (user, userIndex) {
    angular.forEach($scope.Employments, function (employee, employeeIndex) {
        if (employee.user_id === user.id) {
            employee.name = user.name;
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

产量

$scope.Employments = [ { user_id: 1, title: "manager", name: "ryan" }, 
                       { user_id: 2, title: "Professor", name: "Julie" } 
                     ]
Run Code Online (Sandbox Code Playgroud)

工作演示

更新3

用于创建嵌套员工结构的代码,如下所示$scope.Users$scope.Employments

$scope.employees = [];
angular.forEach($scope.Employments, function (employee, employeeIndex) {
    var employeeObject = {};
    employeeObject.title = employee.title;
    angular.forEach($scope.Users, function (user, userIndex) {
        if (employee.user_id === user.id) {
            employeeObject.user = user;
        }
    });
    $scope.employees.push(employeeObject);
});
Run Code Online (Sandbox Code Playgroud)

产量

[ { title: "manager", user: { "id": 1, "name": "ryan" } }, 
  { title: "Professor", user: { "id": 2, "name": "Julie" } } 
]
Run Code Online (Sandbox Code Playgroud)

工作演示