Intereting Posts

在这种特殊情况下如何将数组转换为对象?

我正在转换一些数据,以可读的方式将其发送到前端。

我只是将一些XML数据转换成JSON,我得到一个对象,但每个值是key : ['value'] ,我需要它的key: 'value'

我发送这样的数据res.status(200).json({dealersData}); dealersData返回这个

 { "dealersData": [ { "DealerId": [ "1" ], "DealerName": [ "Carmen" ], "NickName": [ "Carmen" ], "Picture": [ "00001.jpg" ], "Active": [ "1" ], "LegalId": [ "111111111" ], "TypeId": [ "1" ] }, { "DealerId": [ "14" ], "DealerName": [ "Jaz" ], "NickName": [ "Jaz" ], "Active": [ "1" ], "LegalId": [ "111111187" ], "TypeId": [ "1" ] } ] } 

所以你可以看到我得到的数据"TypeId":["1"]等,我不想这样,我想要"TypeId" : 1 ,那么我该怎么做才能将该数组翻译成希望使用Lodash对象?

Solutions Collecting From Web of "在这种特殊情况下如何将数组转换为对象?"

对于每个经销商迭代键并用值[0]replace值。

 dealersData = dealersData.map( function( dealer ){ Object.keys( dealer ).forEach( function(key){ dealer[key] = dealer[key][0]; }) return dealer; }); 

http://jsfiddle.net/r38u4qag/1/ (或ES2015胖箭头版本: http : //jsfiddle.net/r38u4qag/2/ )

这将recursion地遍历该对象,将长度为1的数组更改为string:

 function process(obj) { for(var key in obj) { if(obj[key] instanceof Array && obj[key].length==1) { obj[key]= obj[key][0]; } else if(obj[key] instanceof Object) { process(obj[key]); } } } //process 
 function process(obj) { for(var key in obj) { if(obj[key] instanceof Array && obj[key].length==1) { obj[key]= obj[key][0]; } else if(obj[key] instanceof Object) { process(obj[key]); } } } //process var obj= { "dealersData": [ { "DealerId": [ "1" ], "DealerName": [ "Carmen" ], "NickName": [ "Carmen" ], "Picture": [ "00001.jpg" ], "Active": [ "1" ], "LegalId": [ "111111111" ], "TypeId": [ "1" ] }, { "DealerId": [ "14" ], "DealerName": [ "Jaz" ], "NickName": [ "Jaz" ], "Active": [ "1" ], "LegalId": [ "111111187" ], "TypeId": [ "1" ] } ] } process(obj); document.querySelector('pre').innerHTML= JSON.stringify(obj,'\n',2); 
 <pre></pre> 

如果我做对了,你有数组,但你不需要它们,因为你总是会返回一个值,对吧?

如果是这样的话,你只需要在你的数组对象上调用.toString()方法。 我会迭代你的经销商数据在所有arrays上做到这一点:

 for(var i = 0; i < dealersData.length; i++) { dealersData[i].DealerId = dealersData[i].DealerId.toString(); dealersData[i].DealerName = dealersData[i].DealerName.toString(); [...] }