Как получить новый массив после сравнения 2-х исходных
Всем Доброго времени года.
Дано 2 массива объектов(pages[] и categories[]). Нужно перебрав элементы массива и свойств каждого из объектов, получить новый массив с изменёнными свойствами объектов в нём: Делаю так: categories: [{_id:'5d636c50349128976d09806a',catName:'Banking',catClass:'banking',userId:''}, {_id:'5d636c50349128976d09806b',catName: 'Torrents', catClass: 'torrents', userId:''}, {_id:'5d636c50349128976d09806c',catName: 'AudioBooks', catClass: 'audiobooks', userId:''}]; pages: [ {id: 0, name: 'N-0', link: '', ctgrId: '5d636c50349128976d09806a',userId: '',screen:''}, {id: 1, name: 'N-1', link: '', ctgrId: '5d636c50349128976d09806a',userId: '',screen:''}, {id: 2, name: 'N-2', link: '', ctgrId: '5d636c50349128976d09806a',userId: '',screen:''}, {id: 3, name: 'N-3', link: '', ctgrId: '5d636c50349128976d09806c',userId: '',screen:''}] const getPagesArr = (pages, categories) =>{ for(var i=0; i <= pages.length; i++){ for(var j=0; j <= categories.length; j++){ for(var kk in pages[i]){ for(var dd in categories[j]){ if(pages[i][kk] === categories[j][dd]){ pages[i]['ctgrId'] = categories[j]['catClass'] } } } } } return pages; } const newArray = getPagesArr(pages, categories); Должен получиться новый массив pages, в котором у объектов со свойством ctgrId должно быть значение объектов catClass из categories, при совпадении свойств pages[i]['ctgrId'] === categories[j]['_id'] |
Попробовал такой вариант
const getPagesArr = (pages, categories) =>{ for(var i=0; i <= pages.length; i++){ for(var j=0; j <= categories.length; j++){ for(var kk in pages[i]){ for(var dd in categories[j]){ if(pages[i]['ctgrId'] === categories[j]['_id']){ pages[i]['ctgrId'] = categories[j]['catClass'] } } } } } return pages; } Результат получился правильный, но решение какое-то кривоватое |
komplekt_17,
не для ie! categories = [{_id:'5d636c50349128976d09806a',catName:'Banking',catClass:'banking',userId:''}, {_id:'5d636c50349128976d09806b',catName: 'Torrents', catClass: 'torrents', userId:''}, {_id:'5d636c50349128976d09806c',catName: 'AudioBooks', catClass: 'audiobooks', userId:''}]; pages = [ {id: 0, name: 'N-0', link: '', ctgrId: '5d636c50349128976d09806a',userId: '',screen:''}, {id: 1, name: 'N-1', link: '', ctgrId: '5d636c50349128976d09806a',userId: '',screen:''}, {id: 2, name: 'N-2', link: '', ctgrId: '5d636c50349128976d09806a',userId: '',screen:''}, {id: 3, name: 'N-3', link: '', ctgrId: '5d636c50349128976d09806c',userId: '',screen:''}] const getPagesArr = (pages, categories) =>{ const obj = Object.fromEntries(categories.map(({_id, catClass})=> [_id, catClass])); pages.forEach( el => { const {ctgrId} = el; ctgrId in obj && (el.ctgrId = obj[ctgrId]) }) return pages; } const newArray = getPagesArr(pages, categories); console.log(newArray) |
function getPagesArr(pages, categories) { var map = categories.reduce((m, c) => (m.set(c._id, c.catClass), m), new Map()); return pages.map((p) => { var v = Object.assign({}, p); v.ctgrId = map.get(p.ctgrId) || p.ctgrId; return v; }); } |
:) :write:
const categories = [{_id:'5d636c50349128976d09806a',catName:'Banking',catClass:'banking',userId:''}, {_id:'5d636c50349128976d09806b',catName: 'Torrents', catClass: 'torrents', userId:''}, {_id:'5d636c50349128976d09806c',catName: 'AudioBooks', catClass: 'audiobooks', userId:''}]; const pages = [ {id: 0, name: 'N-0', link: '', ctgrId: '5d636c50349128976d09806a',userId: '',screen:''}, {id: 1, name: 'N-1', link: '', ctgrId: '5d636c50349128976d09806a',userId: '',screen:''}, {id: 2, name: 'N-2', link: '', ctgrId: '5d636c50349128976d09806a',userId: '',screen:''}, {id: 3, name: 'N-3', link: '', ctgrId: '5d636c50349128976d09806c',userId: '',screen:''}] function getPagesArr(pages, categories) { var map = categories.reduce((m, {_id, catClass}) => ({[_id] : catClass, ...m}), {}); return pages.map( p => { var v = {...p, ctgrId : map[p.ctgrId] || p.ctgrId}; return v; }); } const newArray = getPagesArr(pages, categories); console.log(newArray) |
function getPagesArr(pages, categories) { return pages.map(p=>{ var x = categories.find(c => c._id == p.ctgrId); x && (p.ctgrId = x.catClass); return p; }); } |
Часовой пояс GMT +3, время: 03:09. |