Join Node Confusion

I am trying to combine the payload of a number of different nodes into a single payload.
I am able to get 2 payloads to combine in the proper order but when I add a 3rd or more nodes the order is scrambled.

I did notice in the debug window that each node had "string[##]" attached. I thought that the order was based on the bracketed number but that is not the case.

I can't decipher what is controlling the order.

This is my flow:
[{"id":"423dd1ab.857b5","type":"tab","label":"Flow 1","disabled":false,"info":""},{"id":"4e175c9f.3c03c4","type":"api-current-state","z":"423dd1ab.857b5","name":"Forecast Data","server":"890f6b21.aaf278","version":1,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","override_topic":false,"entity_id":"sensor.forecast","state_type":"str","state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","blockInputOverrides":false,"x":160,"y":540,"wires":[["5f085fd.dfe6fa","22acc926.700a76"]]},{"id":"b5954f4b.4fee4","type":"api-current-state","z":"423dd1ab.857b5","name":"Commute Time","server":"890f6b21.aaf278","version":1,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","override_topic":false,"entity_id":"sensor.time_to_work","state_type":"str","state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","blockInputOverrides":false,"x":140,"y":620,"wires":[["22acc926.700a76","5f085fd.dfe6fa"]]},{"id":"5f085fd.dfe6fa","type":"join","z":"423dd1ab.857b5","name":"","mode":"custom","build":"string","property":"payload","propertyType":"msg","key":"topic","joiner":"","joinerType":"str","accumulate":false,"timeout":"","count":"5","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"","reduceFixup":"","x":470,"y":640,"wires":[["22acc926.700a76"]]},{"id":"22acc926.700a76","type":"debug","z":"423dd1ab.857b5","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":670,"y":480,"wires":},{"id":"c6fee9c3.7e6e88","type":"change","z":"423dd1ab.857b5","name":"To Work","rules":[{"t":"set","p":"payload","pt":"msg","to":"minutes to get to work this morning.","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":280,"y":280,"wires":[["22acc926.700a76","5f085fd.dfe6fa"]]},{"id":"41dddd4b.dd4184","type":"change","z":"423dd1ab.857b5","name":"Approx Time","rules":[{"t":"set","p":"payload","pt":"msg","to":"It will take approximately ","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":290,"y":200,"wires":[["22acc926.700a76","5f085fd.dfe6fa"]]},{"id":"617db7cd.5c03c8","type":"change","z":"423dd1ab.857b5","name":"Good Morning","rules":[{"t":"set","p":"payload","pt":"msg","to":"Good Morning. Here is the weather for ","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":300,"y":100,"wires":[["5f085fd.dfe6fa","22acc926.700a76"]]},{"id":"7ba3f0b6.8b71","type":"inject","z":"423dd1ab.857b5","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":80,"y":80,"wires":[["617db7cd.5c03c8","4e175c9f.3c03c4","41dddd4b.dd4184","c6fee9c3.7e6e88","b5954f4b.4fee4"]]},{"id":"890f6b21.aaf278","type":"server","z":"","name":"Home Assistant","legacy":false,"hassio":false,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true}]

I'd appreciate any help/advice

I can't look at your flow at the moment, but if you are not doing so then look at the key/value pair mode using the topic as the key. Then make sure the individual messages have different topics.

@Colin
Ah, I keep forgetting that I can change the mag.payload to something else.
So now I have an object with 5 parts in the correct order.

object
1: "Good Morning. Here is the weather for "
2: "Today. Mainly cloudy. High plus 2. UV index 1 or low."
3: "It will take approximately "
4: "15"
5: "minutes to get to work this morning."

I don't even know what I have now to look up how I change it to JSON :slight_smile: