Javascript映射

时间:2015-11-25 12:12:57

标签: javascript arrays

在我们的项目中,我们以下列格式从DB获取数据。

[
    [
        "ClearDB",
        "test1@test.com",
        "com.test.cleardb"
    ],
    [
        "Cricbuzz",
        "test2@test.com",
        "com.test.cricbuzz"
    ],
    [
        "Hangout",
        "test3@test.com",
        "com.test.hangout"
    ]
]

我希望这个键值格式如下所述

[
    {
        "projname": "ClearDB",
        "projmanager": "test1@test.com",
        "package": "com.test.cleardb"
    },
    {
        "projname": "Cricbuzz",
        "projmanager": "test2@test.com",
        "package": "com.test.cricbuzz"
    },
    {
        "projname": "Hangout",
        "projmanager": "test3@test.com",
        "package": "com.test.hangout"
    }
]

请提供一个正确的方法来实现这一点。

5 个答案:

答案 0 :(得分:6)

您可以简单地为每个数组创建一个新对象,并创建一个具有map函数的对象数组,如下所示

var keys = ["projname", "projmanager", "package"];

console.log(data.map(function (arr) {
  var obj = {};
  keys.forEach(function (key, idx) { obj[key] = arr[idx]; });
  return obj;
}));

<强>输出

[ { projname: 'ClearDB',
    projmanager: 'test1@test.com',
    package: 'com.test.cleardb' },
  { projname: 'Cricbuzz',
    projmanager: 'test2@test.com',
    package: 'com.test.cricbuzz' },
  { projname: 'Hangout',
    projmanager: 'test3@test.com',
    package: 'com.test.hangout' } ]

答案 1 :(得分:4)

Array.prototype.map

var results = db.map(function (v) {
  return {
     projname: v[0],
     projmanager: v[1],
     package: v[2]
  };
});

答案 2 :(得分:1)

如果

var array =[
[
    "ClearDB",
    "test1@test.com",
    "com.test.cleardb"
],
[
    "Cricbuzz",
    "test2@test.com",
    "com.test.cricbuzz"
],
[
    "Hangout",
    "test3@test.com",
    "com.test.hangout"
]
];

然后

var obj = [];
array.each(function(item){ obj.push({"projname": item[0],
                                      "projmanager":item[1], 
                                      "package": item[2]})
});

修改

使用Jquery

var obj = [];
$.each(array,function(key,value){ obj.push({"projname": value[0],
                                      "projmanager":value[1], 
                                      "package": value[2]})
});

使用javascript

var obj = [];
array.forEach(function(item){ obj.push({"projname": item[0],
                                      "projmanager":item[1], 
                                      "package": item[2]})
});

答案 3 :(得分:1)

假设您从数据库获取的数据存储在变量&#39; abc&#39;

var abc = [];
var output = [];
for(var i = 0; i< abc.length; i++){
    output[i] = {};
    output[i].projname = abc[i][0];
    output[i].projmanager = abc[i][1];
    output[i].package = abc[i][2];
}

注意:&#39; abc&#39;是您从DB存储数据的变量。

答案 4 :(得分:1)

在ES6中:

input . map(([projname, projmanager, package]) => ({projname, projmanager, package}));

[]中的部分将参数解构为map,这是子阵列之一,将第一个元素分配给projname,依此类推。 {}中的部分创建并返回一个对象,其关键字为'projname',其值为projname等。

如果要概括它以使用任何字段名称数组(['projname', 'projmanager', 'package']):

input . map(
  values => 
    values . reduce(
      (result, value, i) => {
        result[fieldnames[i]] = value;
        return result;
      },
      {}
    )
);