在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];
}
答案 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>