04.09.2019, 20:20
|
|
Аспирант
|
|
Регистрация: 14.01.2017
Сообщений: 46
|
|
Как получить новый массив после сравнения 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']
|
|
04.09.2019, 20:22
|
|
Аспирант
|
|
Регистрация: 14.01.2017
Сообщений: 46
|
|
Попробовал такой вариант
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;
}
Результат получился правильный, но решение какое-то кривоватое
|
|
04.09.2019, 21:13
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,105
|
|
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)
|
|
04.09.2019, 21:18
|
|
Профессор
|
|
Регистрация: 25.10.2016
Сообщений: 1,012
|
|
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;
});
}
|
|
04.09.2019, 22:29
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,105
|
|
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)
|
|
05.09.2019, 13:02
|
|
Профессор
|
|
Регистрация: 01.12.2016
Сообщений: 3,650
|
|
function getPagesArr(pages, categories) {
return pages.map(p=>{
var x = categories.find(c => c._id == p.ctgrId);
x && (p.ctgrId = x.catClass);
return p;
});
}
|
|
|
|