使用JavaScript / AngularJS将数组转换为对象

时间:2014-12-29 19:34:38

标签: javascript arrays angularjs

我需要将父数组中的数组转换为对象以匹配我的数据库模型数据。

我有这样的数组:

emails: Array[2] 
0: "example@mail.com"
1: "otherexample@mail.com"
id: 1 
firstname: "Jane"
lastname: "Doe

我想要实现的是将电子邮件数组转换为对象数组,如下所示:

    emails: Array[2] 
    0: 
{
name: "example@mail.com"
}
    1: 
{
name: "otherexample@mail.com"
}
    id: 1 
    firstname: "Jane"
    lastname: "Doe

我尝试使用此代码将数组转换为对象但由于某种原因它失败(没有数据显示 - >变量rv为空):

 var rv = {};
        for (var i = 0; i < dbInfo.emails.length; ++i)
            if (dbInfo.emails[i] !== undefined) rv[i] = dbInfo.emails[i];

有人知道为什么我的代码会失败,有人知道这类问题的解决方案吗?

谢谢你。

4 个答案:

答案 0 :(得分:9)

这是Array.prototype.map函数的完美用法:

dbInfo.emails = dbInfo.emails.map(function(e) {
    return { name: e };
});

即。只需将数组中的每个元素(e)转换为对象{ name: email }

答案 1 :(得分:5)

我认为你在寻找什么是angular.extend。有关angular.extend的好文章,请点击 here。有关文档,请单击 here

var newObj = {};
angular.extend(newObj,[Array here]);

答案 2 :(得分:1)

您正在将电子邮件放入对象中。相反,您希望将每个电子邮件包装在自己的对象中,然后将其放回到数组中。

for (var i = 0; i < dbInfo.emails.length; ++i) {
    if(dbInfo.emails[i] !== undefined) {
        dbInfo.emails[i] = { name: dbInfo.emails[i] };
    }
}

答案 3 :(得分:0)

这项工作完美无缺   //选项选择

  var range = [];
    for (var i=1; i<$scope.totalItems+1; i++) {
      range.push({value:i});
    }  

  console.log(range);