Редактировать: является ли stageID - 1 индексом следующего связанного сообщения?Если да, это решение или Ninas является corrent.
Я интерпретировал I need to get "stageID"(for instance in fisrt element stadeID = 3 ) and move to the third element in that array
как, если stageID = 3, следующий элемент является 3-м элементом массива.
Если Iправильно понял логику, что-то вроде этого может работать:
Мы создаем отдельную функцию, которая будет извлекать все посты, в которых рендер верен и сообщение существует.
Затем мы можем просто отобразить этот массив
Преимущество заключается в том, что мы можем легко использовать его в функции отображения, чтобы сделать это для всех сообщений.
const posts = [
{ "algID": 0, "render": true, "message": "first message", "stageID": "3" },
{ "algID": 0, "render": false, "message": "second message", "message_type": "text" },
{ "algID": 0, "render": true, "message": "third message", "message_type": "text", "stageID": "5" },
{ "algID": 0, "render": false },
{ "algID": 0, "render": false, "stageID": "4" },
{ "algID": 0, "render": false }
];
const find_message_chain = post => {
const index = parseInt( post.stageID ) - 1;
// If we have render: true, we will need to look for the next post as well.
// By recursively calling find_chain and concatenating all the results, we get a single, one lvel deep array instead of nested arrays we have to .flat() at the end.
if ( post.render && post.message ) return [ post.message, ...find_message_chain( posts[ index ]) ];
// If we do not have render true, but do have a message, this post will br the last one in the chain, so we return it.
else if ( post.message ) return [ post.message ];
// If no message exists, we do not want to return the post, since the chain ends.
else return [];
};
const messages_for_post_0 = find_message_chain( posts[ 0 ] );
console.log( messages_for_post_0 );
const all_messages_per_post = posts.map( find_message_chain );
console.log( all_messages_per_post );
Sidenote 1: я бы добавил фактический идентификатор к сообщениям, поэтому нам не нужно полагаться на индекс массива исходных данных (сообщений), чтобы определить, какое сообщение являетсясвязан с какой другой публикацией.
Sidenote 2: функция рекурсивной цепочки может быть легко сделана менее точной, чтобы можно было произвольно извлекать любое значение, не только сообщения.