这应该很容易,但出于某种原因,我被困 -
如果我有这样的json并需要转换它:
{ data : [
{id : data1, name : "Description"},
{id : data2, name : "Contribution"},
{id : data3, name : "Footer"},
]}
这样的事情?
{
data : [
{ data1: "Description" , data2: "Contribution", data3: "Footer" },
]}
谢谢, 斯图尔特
答案 0 :(得分:2)
小Array.prototype.reduce
应该完成这项工作:
var obj = {
data: [
{ id: 'data1', name: 'Description' },
{ id: 'data2', name: 'Contribution' },
{ id: 'data3', name: 'Footer' },
]
};
obj.data = obj.data.reduce(function (r, a) {
r[a.id] = a.name;
return r;
}, {});
document.write('<pre>' + JSON.stringify(obj, 0, 4) + '</pre>');
答案 1 :(得分:1)
您可以在数组上使用for
循环。
var newData = [];
for(var i=0;i<data['data'].length;i++){
var obj={};
obj[data['data'][i]['id']]=data['data'][i]['name'];
newData.push(obj);
}
console.log(newData);
参考fiddle
更新了答案
var newArray = data['data'].map(function(obj){
var rObj = {};
rObj[obj.id] = obj.name;
return rObj;
});
您也可以使用Array.map方法。
答案 2 :(得分:0)
答案 3 :(得分:0)
var array=[];
for(int i=0; i<data.length; i++){
var object={};
object[data[i].id=data[i].name];
array.push(obj);
}
答案 4 :(得分:0)
您可以使用lodash几乎在一行中完成:
var obj1 = { data : [
{id: "data1", name: "Description"},
{id: "data2", name: "Contribution"},
{id: "data3", name: "Footer"},
]};
var obj2 = {
data: _.zipObject(_.pluck(obj1.data, "id"),
_.pluck(obj1.data, "name"))
}
document.write(JSON.stringify(obj2, null, 2));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.10.1/lodash.js"></script>
查看_.pluck
和_.zipObject
。
您也可以使用underscore,但lodash更快,更完整,您可以只使用您需要的内容创建自定义构建。