There is an array

const docs = [ {type: 'ps', number: '123456'}, {type: 'psp', number: '223456'}, {type: 'psp', number: '423456'}, {type: 'vul', number: '823456'}, ]; 

How to bring it to mind

 { ps: [ {number: '123456'} ], psp: [ {number: '223456'}, {number: '423456'}, ], vul: [ number: '823456' ] } 
  • As far as I know, const docs cannot be changed. const - Aliaksandr Pitkevich

4 answers 4

Option with reduce :

 const docs = [ {type: 'ps', number: '123456'}, {type: 'psp', number: '223456'}, {type: 'psp', number: '423456'}, {type: 'vul', number: '823456'}, ]; let newdocs = docs.reduce((prev, item) => { let type = item.type; prev[type] = prev[type] || []; prev[type].push({number : item.number}) return prev; }, {}); console.log(newdocs); 

    Implementing using _.reduce && es6 reduce

    Link to codepen: https://codepen.io/Zentro/pen/PmVJww?editors=0011

    When using do not forget about: 1. accumulator - the 1st argument of the iteratee function | function ( result , item) 2. default accumulator, which takes 3 arguments and in this case is an object | {}

    Why may need lodash ? Lodash allows you to apply reduce not only to the array but also to the {} object.

      const docs = [ {type: 'ps', number: '123456'}, {type: 'psp', number: '223456'}, {type: 'psp', number: '423456'}, {type: 'vul', number: '823456'}, ]; // lodash reduce var reducedDocs = _.reduce(docs, function (result, item) { (result[item.type] || (result[item.type] = [])).push({'number': item.number}); return result; }, {}); console.log('reducedUsers', reducedDocs) // es6 reduce var es6reduce = docs.reduce((result, item) =>{ (result[item.type] || (result[item.type] = [])).push({ 'number': item.number }); return result }, {}); console.log('es6reduce', es6reduce); 
       const docs = [ {type: 'ps', number: '123456'}, {type: 'psp', number: '223456'}, {type: 'psp', number: '423456'}, {type: 'vul', number: '823456'}, ]; var newdocs = [], i; for(i=0; i<docs.length; i++) { if(!(docs[i].type in newdocs)) { newdocs[docs[i].type] = [{number: docs[i].number}]; } else { newdocs[docs[i].type].push({number: docs[i].number}); } } console.log(newdocs.psp[1].number); // 423456 

         const docs = [ {type: 'ps', number: '123456'}, {type: 'psp', number: '223456'}, {type: 'psp', number: '423456'}, {type: 'vul', number: '823456'}, ]; var newObj = {}; // создаем пустой объект for (key in docs) { // пробегаемся по массиву if (!newObj[docs[key].type]) { // если еще нету поля newObj[docs[key].type] = []; // создаем его и иницализируем пустой массив } newObj[docs[key].type].push({number: docs[key].number}); // заполняем поле number'ом } console.log(newObj); 

        • A bit ahead - Eduard Misk