{"ScriptPreparationCode":"var variants = [\r\n {\r\n gateDetails: [\r\n {\r\n channelIds: [\r\n \u0022srcl\u0022,\r\n \u0022tkpd\u0022\r\n ],\r\n gateId: \u0022khusus-pi\u0022\r\n },\r\n {\r\n channelIds: [\r\n \u0022srcl\u0022,\r\n \u0022tkpd\u0022\r\n ],\r\n gateId: \u0022khusus-pi-2\u0022\r\n }\r\n ]\r\n },\r\n {\r\n gateDetails: [\r\n {\r\n channelIds: [\r\n \u0022srcl\u0022,\r\n \u0022tkpd\u0022\r\n ],\r\n gateId: \u0022khusus-pi\u0022\r\n },\r\n {\r\n channelIds: [\r\n \u0022srcl\u0022,\r\n \u0022tkpd\u0022\r\n ],\r\n gateId: \u0022khusus-pi-2\u0022\r\n }\r\n ]\r\n }\r\n];","TestCases":[{"Name":"Reduce Map","Code":"const result = variants.reduce((gates, nextVariant) =\u003E {\r\n nextVariant.gateDetails.forEach(gateDetail =\u003E {\r\n if (gates.every(gate =\u003E gate.gateId !== gateDetail.gateId)) {\r\n gates.push({\r\n channelIDs: gateDetail.channelIds,\r\n gateId: gateDetail.gateId,\r\n });\r\n } else {\r\n gates = gates.map(gate =\u003E {\r\n if (\r\n gate.gateId === gateDetail.gateId \u0026\u0026\r\n gateDetail.channelIds \u0026\u0026\r\n gate.channelIDs\r\n ) {\r\n const newChannelIds = gateDetail.channelIds.filter(\r\n channelId =\u003E\r\n !gate.channelIDs.includes(channelId)\r\n );\r\n return {\r\n ...gate,\r\n channelIDs: [\r\n ...gate.channelIDs,\r\n ...newChannelIds,\r\n ],\r\n };\r\n }\r\n return gate;\r\n });\r\n }\r\n });\r\n return gates;\r\n},[]);","IsDeferred":false},{"Name":"Reduce Object","Code":"const objGate = variants.reduce((gate, variant) =\u003E {\r\n for(const gateDetail of variant.gateDetails) {\r\n if(gate[gateDetail.gateId]) {\r\n const newChannelIds = gateDetail.channelIds.filter(\r\n channelId =\u003E !gate[gateDetail.gateId].channelIDs.includes(channelId)\r\n );\r\n \r\n if(!newChannelIds.length) {\r\n continue \r\n }\r\n \r\n gate[gateDetail.gateId] = {\r\n ...gate[gateDetail.gateId],\r\n channelIDs: [\r\n ...gate[gateDetail.gateId].channelIDs,\r\n ...newChannelIds\r\n ]\r\n }\r\n }else {\r\n gate[gateDetail.gateId] = {\r\n gateId: gateDetail.gateId,\r\n channelIDs: gateDetail.channelIds\r\n } \r\n }\r\n }\r\n \r\n return gate\r\n}, {})\r\n\r\nconst gates = Object.keys(objGate).map(gateId =\u003E \r\n objGate[gateId]\r\n);","IsDeferred":false}]}