在这种特殊情况下如何将数组转换为对象?
我正在转换一些数据,以可读的方式将其发送到前端。
我只是将一些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
对象?
对于每个经销商迭代键并用值[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(); [...] }