将字符串数组转换为对象数组的最佳方法是什么?

时间:2016-08-03 09:06:21

标签: javascript arrays

我们说我有一系列电子邮件:

['a@gmail.com', 'b@gmail.com', 'c@gmail.com']

我需要将它转换为如下所示的对象数组:

[
    {
        id: 'a@gmail.com',
        invite_type: 'EMAIL'
    },
    {
        id: 'b@gmail.com',
        invite_type: 'EMAIL'
    },
    {
        id: 'c@gmail.com',
        invite_type: 'EMAIL'
    }
]

为了做到这一点,我写了以下代码:

$scope.invites = [];

$.each($scope.members, function (index, value) {
    let inviteMember = {
        'id': value,
        invite_type: 'EMAIL'
    }

    $scope.invites.push(inviteMember);
});

有没有更好的方法呢?

2 个答案:

答案 0 :(得分:3)

由于您已经在使用jQuery,因此您可以像这样使用jQuery.map()

var originalArray = ['a@gmail.com', 'b@gmail.com', 'c@gmail.com']

var newArray = jQuery.map(originalArray, function(email) {
    return {
        id: email,
        invite_type:'EMAIL'
    };
});

jQuery.map()将给定数组中的所有项目转换为新的项目数组。我传递给jQuery.map()的函数被调用原始数组的每个元素,并返回一个写入最终数组的新元素。

还有Array.prototype.map()本地not supported in IE8。如果您未定位IE8或使用填充,则可以使用原生.map()

var newArray = originalArray.map(function(email) {
    return {
        id: email,
        invite_type:'EMAIL'
    };
});

答案 1 :(得分:1)

此模式

targetArray = []
sourceArray.forEach(function(item) {
    let x = do something with item
    targetArray.push(x)
})

可以用map更简洁地表达:

targetArray = sourceArray.map(function(item) {
    let x = do something with item
    return x
})

在你的情况下:

$scope.invites = $scope.members.map(function(value) {
     return {
          id: value,
          invite_type: 'EMAIL'
      }
});