我们说我有一系列电子邮件:
['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);
});
有没有更好的方法呢?
答案 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'
}
});