JavaScript对象作为长度为1的数组有less量值如何使它们不是数组

我有一个使用xml2js库从XML创build的JS对象。 JS对象具有所有元素作为数组,每个数组中只有一个元素。 如何将其更改为仅具有值而不在数组内。

例如,它看起来像这样:{a:[b],c:[d]}我希望它是像{a:b,c:d}

如果你想让它在嵌套的情况下工作,你需要通过结构recursion:

undoTrivialArray = (obj) -> for own key of obj if _.isArray(obj[key]) && obj[key].length == 1 obj[key] = obj[key][0] else if _.isObject(obj[key]) undoTrivialArray(obj[key]) 

请注意,我从下划线库使用isArrayisObject 。 这主要是为了保持可读性; 这些testing可分别由{}.toString.call(obj[key]) == '[object Array]'obj[key] == Object(obj[key])来代替(代码取自下划线库) 。

你可以转换对象:

 function undoTrivialArrays( o ) { var k; for (k in o) { if (o.hasOwnProperty(k)) { if ({}.toString.call(o) === '[object Array]' && o.length === 1) o[k] = o[k][0]; } } } 

如果您更喜欢使用库,下面是另一个解决scheme:

 var _ = require('underscore'); function undoTrivialArray(obj) { return _.object(_.keys(obj), _.values(_.flatten(obj))); }