Как привести массив к заданному виду

195
24 мая 2017, 07:13

Есть массив

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

Как его привести к виду

{
    ps: [
        {number: '123456'}
    ],
    psp: [
        {number: '223456'},
        {number: '423456'},
    ],
    vul: [
        number: '823456'
    ]
}
Answer 1

Вариант с 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);

Answer 2
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
Answer 3

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);

READ ALSO
Электронно цифровая подпись в браузере

Электронно цифровая подпись в браузере

Нужно подписывать текстовые документы в браузере (желательно chrome, firefox latest) при помощи ЭЦПКак реализовать такую фичу?

289
Анимация при скролле. Показ элемента

Анимация при скролле. Показ элемента

В body есть несколько контейнер, идущие друг за другом, каждый имеет высоту 100vhМне нужно сделать так, чтобы при скролле один элемент какбы съезжал...

229
Phantom js cant render dynamic page for a screenshot

Phantom js cant render dynamic page for a screenshot

Есть код который с помощью PhantomJS делает скриншоты страницы, на indiegogocom категорически отказывается работать,без кастом хидера выдает пустой...

200
Не работает генерация пароля

Не работает генерация пароля

Столкнулся с проблемой при написании сайта, а именно - не работает генерация пароляСама суть задачи в чем - есть поле для ввода пароля, а рядом...

275