Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const all = [
- {
- name: 'Folder1',
- children: [
- {
- name: 'subfolder 1.1',
- children: [
- {
- name: 'item 1.1.1',
- }, {
- name: 'item 1.1.2',
- },
- ],
- },
- {
- name: 'subfolder 1.2',
- children: [
- {
- name: 'item 1.2.1',
- },
- {
- name: 'item 1.2.2',
- },
- ],
- },
- ],
- },
- {
- name: 'Folder2',
- children: [
- {
- name: 'subfolder 2.1',
- children: [
- {
- name: 'Item 2.1.1',
- },
- {
- name: 'Item 2.1.2',
- },
- ],
- },
- {
- name: 'subfolder 2.2',
- children: [
- {
- name: 'Item 2.2.1',
- },
- {
- name: 'Item 2.2.2',
- },
- ],
- },
- ],
- },
- {
- name: 'Folder3',
- children: [
- {
- name: 'subfolder 3.1',
- children: [
- {
- name: 'Item 3.1.1',
- },
- {
- name: 'Item 3.1.2',
- },
- ],
- },
- {
- name: 'subfolder 3.2',
- children: [
- {
- name: 'Item 3.2.1',
- },
- {
- name: 'Item 3.2.2',
- },
- ],
- },
- ],
- },
- ]
- function applyFilters(data, filters) {
- function applyFilter(items = [], filter) {
- const filtered = []
- for (const item of items) {
- if (item.name.indexOf(filter) !== -1) {
- filtered.push(item)
- } else {
- const children = applyFilter(item.children, filter)
- if (children.length) {
- filtered.push({
- ...item,
- children,
- })
- }
- }
- }
- return filtered
- }
- let result = data
- for (const filter of filters) {
- result = applyFilter(result, filter)
- }
- return result
- }
- // test suites
- function it(message, expression, result) {
- if (expression === result) {
- return console.log(`${message}: passed. Result: ${expression}\n\n`)
- }
- throw Error(`${message}: failed. Expected: "${result}". Actual: "${expression}"`)
- }
- it('JSON.stringify(applyFilters(all, [\'3.2.2\']))', JSON.stringify(applyFilters(all, ['3.2.2'])), '[{"name":"Folder3","children":[{"name":"subfolder 3.2","children":[{"name":"Item 3.2.2"}]}]}]')
- it('JSON.stringify(applyFilters(all, [\'3\', \'2\']).filter(f => f.children.length))', JSON.stringify(applyFilters(all, ['3', '2']).filter(f => f.children.length)), '[{"name":"Folder3","children":[{"name":"subfolder 3.1","children":[{"name":"Item 3.1.2"}]},{"name":"subfolder 3.2","children":[{"name":"Item 3.2.1"},{"name":"Item 3.2.2"}]}]}]')
- it('JSON.stringify(applyFilters(all, [\'.1\']).filter(f => f.children.length))', JSON.stringify(applyFilters(all, ['.1']).filter(f => f.children.length)), '[{"name":"Folder1","children":[{"name":"subfolder 1.1","children":[{"name":"item 1.1.1"},{"name":"item 1.1.2"}]},{"name":"subfolder 1.2","children":[{"name":"item 1.2.1"}]}]},{"name":"Folder2","children":[{"name":"subfolder 2.1","children":[{"name":"Item 2.1.1"},{"name":"Item 2.1.2"}]},{"name":"subfolder 2.2","children":[{"name":"Item 2.2.1"}]}]},{"name":"Folder3","children":[{"name":"subfolder 3.1","children":[{"name":"Item 3.1.1"},{"name":"Item 3.1.2"}]},{"name":"subfolder 3.2","children":[{"name":"Item 3.2.1"}]}]}]')
- it('JSON.stringify(applyFilters(all, [\'Folder2\', \'1.1\']).filter(f => f.children.length))', JSON.stringify(applyFilters(all, ['Folder2', '1.1']).filter(f => f.children.length)), '[{"name":"Folder2","children":[{"name":"subfolder 2.1","children":[{"name":"Item 2.1.1"}]}]}]')
- it('JSON.stringify(applyFilters(all, [\'Folder2\', \'2.1\']).filter(f => f.children.length))', JSON.stringify(applyFilters(all, ['Folder2', '2.1']).filter(f => f.children.length)), '[{"name":"Folder2","children":[{"name":"subfolder 2.1","children":[{"name":"Item 2.1.1"},{"name":"Item 2.1.2"}]},{"name":"subfolder 2.2","children":[{"name":"Item 2.2.1"}]}]}]')
Add Comment
Please, Sign In to add comment