commit
da97f779c4
7 changed files with 164 additions and 3 deletions
@ -0,0 +1,28 @@ |
||||
module.exports = function(data){ |
||||
if (!data || data.length < 1) return {}; |
||||
|
||||
let d = {}, |
||||
keys = Object.keys(data); |
||||
|
||||
for (let i = 0; i < keys.length; i++) { |
||||
let key = keys[i], |
||||
value = data[key], |
||||
current = d, |
||||
keyParts = key |
||||
.replace(new RegExp(/\[/g), '.') |
||||
.replace(new RegExp(/\]/g), '') |
||||
.split('.'); |
||||
|
||||
for (let index = 0; index < keyParts.length; index++){ |
||||
let k = keyParts[index]; |
||||
if (index >= keyParts.length - 1){ |
||||
current[k] = value; |
||||
} else { |
||||
if (!current[k]) current[k] = !isNaN(keyParts[index + 1]) ? [] : {}; |
||||
current = current[k]; |
||||
} |
||||
} |
||||
} |
||||
|
||||
return d; |
||||
}; |
@ -0,0 +1,48 @@ |
||||
'use strict'; |
||||
|
||||
const assert = require('assert'); |
||||
const processNested = require('../lib').processNested; |
||||
|
||||
describe('Test Convert Flatten object to Nested object', function() { |
||||
it('With no nested data', function(){ |
||||
const data = { |
||||
'firstname': 'John', |
||||
'lastname': 'Doe', |
||||
'age': 22 |
||||
}, |
||||
excerpt= { firstname: 'John', lastname: 'Doe', age: 22 }, |
||||
processed = processNested(data); |
||||
|
||||
assert.deepEqual(processed, excerpt); |
||||
}); |
||||
|
||||
it('With nested data', function(){ |
||||
const data = { |
||||
'firstname': 'John', |
||||
'lastname': 'Doe', |
||||
'age': 22, |
||||
'hobbies[0]': 'Cinema', |
||||
'hobbies[1]': 'Bike', |
||||
'address[line]': '78 Lynch Street', |
||||
'address[city]': 'Milwaukee', |
||||
'friends[0][name]': 'Jane', |
||||
'friends[0][lastname]': 'Doe', |
||||
'friends[1][name]': 'Joe', |
||||
'friends[1][lastname]': 'Doe' |
||||
}, |
||||
excerpt = { |
||||
firstname: 'John', |
||||
lastname: 'Doe', |
||||
age: 22, |
||||
hobbies: [ 'Cinema', 'Bike' ], |
||||
address: { line: '78 Lynch Street', city: 'Milwaukee' }, |
||||
friends: [ |
||||
{ name: 'Jane', lastname: 'Doe' }, |
||||
{ name: 'Joe', lastname: 'Doe' } |
||||
] |
||||
}, |
||||
processed = processNested(data); |
||||
|
||||
assert.deepEqual(processed, excerpt); |
||||
}); |
||||
}); |
Loading…
Reference in new issue