Помогите с массивом объектов, нужно из двух создать 1
У меня есть два массива такого плана
Mas1 = [{name: "Anton", age: "20"}, {name: "Artem", age: "23"}, {name: "Rafik", age: "32"}, {name: "Andrey", age: "30"}; Mas2= [{name: "Anton", status: "Yes"}, {name: "Artem", status: "Yes"}, {name: "Rafik", status: "No"}]; нужно создать третий массив, чтобы объединил их по name и получился массив такого плана - Mas3= [{name: "Anton", age: "20", status: "Yes"}, {name: "Artem", age: "23", status: "Yes"}, {name: "Rafik", age: "32", status: "No"}, {name: "Andrey", age: "30"}]; Есть у кого-нибудь варианты решения? |
Aidec,
а можно с нормальными кавычками? |
Исправил)
|
Aidec,
<body> <pre> <script> const Mas1 =[{name: "Anton", age: "20"}, {name: "Artem", age: "23"}, {name: "Rafik", age: "32"}, {name: "Andrey", age: "30"}]; const Mas2 =[{name: "Anton", status: "Yes"}, {name: "Artem", status: "Yes"}, {name: "Rafik", status: "No"}]; const createArr = (...arg) => { const objName = {}; return arg.flat().reduce((ar, el)=> { let name = el.name; let obj = objName[name]; if(!obj) ar.push(objName[name] = {...el}); else Object.assign(obj, el); return ar; }, [] ) }; const Mas3 = createArr(Mas1, Mas2); document.body.append(JSON.stringify(Mas3)) </script></pre> </body> |
Спасибо
|
А можешь подсказать как решить такую проблему
<script> var electrical =[{name: "Anton", age: "20"}, {name: "Artem", age: "#23"}, {name: "Rafik", age: "32"}, {name: "Andrey", age: "30"}]; var personal =[{name: "Anton", status: "7^W#Yes"}, {name: "Artem", status: "#Yes"}, {name: "Rafik", status: "hghg#No"}]; var createArr = (...arg) => { var objName = {}; return [].concat(...arg).reduce((ar, el)=> { let name = el.name; let obj = objName[name]; if(!obj) {objName[name] = {...el}; ar.push(objName[name])} else Object.assign(obj, el); return ar; }, [] ) }; var arr = createArr(electrical, personal); console.log(arr); arr.forEach(function(element) { if (element.hasOwnProperty("status")) { element.status = (element.status).split('#')[1]; }; if (element.hasOwnProperty("age")) { element.age = (element.age).split('#')[1]; }; }); </script> получается проблема в том что там где # нет, мне выдает undefined, а как сделать так что бы у меня показывал место undefined тот тект который там указан без # Например вот так- (4) [{…}, {…}, {…}, {…}] 0: {name: 'Anton', age: '20', status: 'Yes'} 1: {name: 'Artem', age: '23', status: 'Yes'} 2: {name: 'Rafik', age: '32', status: 'No'} 3: {name: 'Andrey', age: '30'} length: 4 а так на данный момент - (4) [{…}, {…}, {…}, {…}] 0: {name: 'Anton', age: undefined, status: 'Yes'} 1: {name: 'Artem', age: '23', status: 'Yes'} 2: {name: 'Rafik', age: undefined, status: 'No'} 3: {name: 'Andrey', age: undefined} length: 4 |
Aidec,
не копируйте сообщения целиком. Пожалуйста, отформатируйте свой код! Для этого его можно заключить в специальные теги: js/css/html и т.п., например: [html run] ... минимальный код страницы с вашей проблемой [/html] О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting. |
Хорошо, отредактировал.
Надеюсь вы поняли мою проблему и возможно знаете как она решается?) |
Aidec,
arr.forEach(function(element) { if (element.hasOwnProperty("status")) { element.status = (element.status).split('#')[1] || element.status; }; if (element.hasOwnProperty("age")) { element.age = +(element.age).split('#')[1] || +element.age; }; }); |
спасибо, помогло:thanks:
|
Часовой пояс GMT +3, время: 20:49. |