将数组更改为对象

时间:2015-08-18 17:33:11

标签: javascript arrays

在Javascript中,我正在寻找转换的最佳方式:

var data1 = [["ff",4],["gg",3],["dd",2],["hh",1]];

为:

var data2 = [
  {word: "ff", frequency: 4},
  {word: "gg", frequency: 3},
  {word: "dd", frequency: 2},
  {word: "hh", frequency: 1}
]

首先会创建一个对象:

var data2 = {};

然后通过For循环运行它以使用data1内容填充它。

for (i = 0; i < data1.length; i++) {
  data2[word] = data1[i][0];
  data2[frequency] = data1[i][1];
}

4 个答案:

答案 0 :(得分:6)

将数组中的元素(元组)映射到相应的对象:

data2 = data1.map(function(pair) {
   return {word: pair[0], frequency: pair[1]};
});

在ES6环境中:

data2 = data1.map(([word, frequency]) => ({word, frequency}));

我的,多么简洁。

答案 1 :(得分:2)

带有一组键的更通用的解决方案:

var data = [['ff', 4], ['gg', 3], ['dd', 2], ['hh', 1]],
    keys = ['word', 'frequency'],
    dataObj = data.map(function (a) {
        return keys.reduce(function (r, b, i) {
            r[b] = a[i];
            return r;
        }, {});
    });

document.write('<pre>' + JSON.stringify(dataObj, 0, 4) + '</pre>');

答案 2 :(得分:0)

lodash / underscore中有许多实用功能可以做到这一点: https://lodash.com/docs#zipObject

如果你想实现自己的版本,那么他们只是创建一个新对象,然后运行数组数组并使用第一个设置keyname,使用第二个设置值:一个简单的for循环就像Blazemonger所说的那样。

答案 3 :(得分:-3)

这是我的快速解决方案:

<html>
<head>
<script type="text/javascript" src="jquery-1.8.1.min.js"></script>
<script type="text/javascript">

$( document ).ready(function() {

    var data = [['ff',4],['gg',3],['dd',2],['hh',1]];

    var converted = [];

    $(data).each(function()
    {
      converted.push( {word: this[0], frequency: this[1]});
    });

    console.dir(converted);

});

</script>
</head>
</html>