clean functional programming

runnable answer for https://softwareengineering.stackexchange.com/a/350583/161652

by b0nyb0y

JavaScript

class PagesList {
  constructor() {
    this.items = {};
  }

  addPage(key, val) {
    this.items[key] = val;
  }
}

const apiData = {
	pages: {
		foo: 'data1',
		arrayOfBars: [
    	{ name: 'data2', data: 'data2' },
      { name: 'data3', data: 'data3' }
    ],
    customBazes: [
    	{ id: 'data4', content: 'data4' },
      { id: 'data5', content: 'data5' }
    ],
	}
};

////////////////////////////////////////////////////////////////////////////////

const processFooPages = (foo) => foo ? [['foo', foo]] : [];
const processBarPages = (bar) => bar ? bar.map(page => [page.name, page.data]) : [];
const processBazPages = (baz) => baz ? baz.map(page => [page.id, page.content]) : [];

const list = new PagesList();
const pages = [].concat(
  processFooPages(apiData.pages.foo),
  processBarPages(apiData.pages.arrayOfBars),
  processBazPages(apiData.pages.customBazes)
);
pages.forEach(([pageName, pageContent]) => list.addPage(pageName, pageContent));

alert(JSON.stringify(list.items, null, 2));