如何将一个数组映射到另一个具有不同值的数组(AngularJS)

4

目前我正在尝试使用现有的数组将其映射到另一个数组,以便匹配服务器所需的内容。

例如...

我有一个数组:

$scope.users = [{
        "firstName": "john",
        "middleName": null,
        "lastName": "doe",
        "registrationNumber": "334"
    },
    {
        "firstName": "paul",
        "middleName": null,
        "lastName": "dean",
        "registrationNumber": "223"
    },
    {
        "firstName": "andrew",
        "middleName": null,
        "lastName": "mac",
        "registrationNumber": "132"
    }
]

然而我希望它看起来像这样...
[{
    name: "john doe",
    value: {
        registration: 334,
        last: "doe",
        first: "john"
    }
}]

所以我一直在做的是像这样映射它出来...但只得到了第一个。

var list = [{
    name: $scope.users[0].firstName + ' ' + $scope.users[0].lastName,
    value: {
        registration: $scope.users[0].registrationNumber,
        first: $scope.users[0].firstName,
        last: $scope.users[0].lastName
    }
}];

我尝试使用angular.forEach来获取所有列表并将其推送...但是目前还没有取得太好的效果...任何帮助都将是极好的!


2
听说过Array.map吗? - juvian
1个回答

7
一种解决方案可能是:
var list = $scope.users.map(function(user) {
    return {
        name: user.firstName + ' ' + user.lastName,
        value: {
            registration: user.registrationNumber,
            first: user.firstName,
            last: user.lastName
        }
    };
});

解释

Array.map() 遍历现有数组并返回一个新的修改后的数组。

因此,您需要在 $scope.users 上使用 map,并且对于每个 user 您都想要返回一个新对象。在每次迭代中,您都可以访问每个 user。新对象将存储在 list 中,它将是一个数组。


1
而对于 Array.map 的支持现在已经有好几年了(请注意 < IE10)http://caniuse.com/#search=map - flyer
能否在不创建新数组的情况下使用.map方法? - riki481

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接